背景
大家好,我是yma16,想记录微信小程序用户调用openai时候的操作操作写入数据库,技术选型采用spring+mybatis
什么是spring mybatis
Spring Mybatis 是一款轻量级、快速、高效的持久层框架,是基于 Mybatis 的增强版本。它可以与 Spring 框架无缝集成,提供了更加方便的使用方式。
Spring Mybatis 解决了传统 Mybatis 在使用中存在的缺陷,比如需要手动创建 SqlSession、需要手动管理事务等;同时也提供了更加便捷的注解方式和 XML 配置方式,使得开发人员可以根据不同的需求进行选择。
Spring Mybatis 的主要特点如下:
- 支持注解方式和 XML 配置方式,可以根据不同的需求进行选择。
- 与 Spring 框架无缝集成,提供了更加方便的使用方式。
- 自动管理事务,简化了事务管理的复杂度。
- 提供了更加方便的 CRUD 操作方式。
- 支持动态 SQL,可以根据不同的条件生成不同的 SQL 语句,提高了 SQL 的灵活性。
- 提供了二级缓存机制,可以提高查询效率。
总之,Spring Mybatis 是一款功能强大、易于使用的持久层框架,可以帮助开发人员快速、高效地进行数据库操作。
封装统一的返回格式
思想:返回统一的格式给前端,封装一个result
{code,message,data}
package com.yma16.springcloud.entites; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; /** * 公共的参数返回 * @param <T> */ @Data @AllArgsConstructor @NoArgsConstructor public class CommonResult <T>{ private Integer code; private String message; private T data; public CommonResult(Integer code,String message){ this(code,message,null); } }
数据库
设置id为主键
entities层
映射数据库字段
package com.yma16.springcloud.entites; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; @Data @AllArgsConstructor @NoArgsConstructor public class Product implements Serializable { private String id; private String name; private String kind; private String url; private String relate_user_name; private String relate_user_id; private String description; private String back; private String front; /** * 创建时间 */ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private java.util.Date create_time; /** * 更新时间 */ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private java.util.Date update_time; }
dao层
package com.yma16.springcloud.dao; import com.yma16.springcloud.entites.Product; import com.yma16.springcloud.vo.ProductUpdateVo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.ArrayList; /** * author:yma16 * date: 2022-12-31 */ @Mapper public interface ProductDao { public int create(Product product); public int delete(@Param("id") String id); public int update(ProductUpdateVo productUpdateVo); public ArrayList<Product> search(Product product); public ArrayList<Product> getList(); }
service
包装一层dao
interface
package com.yma16.springcloud.service; import com.yma16.springcloud.entites.Product; import com.yma16.springcloud.vo.ProductUpdateVo; import org.apache.ibatis.annotations.Param; import java.util.ArrayList; /** * author:yma16 * date:2022-12-31 */ public interface ProductService { public int create(Product product); public int delete(@Param("id") String id); public int update(ProductUpdateVo productUpdateVo); public ArrayList<Product> search(Product product); public ArrayList<Product> getList(); }
implement
package com.yma16.springcloud.service.impl; import com.yma16.springcloud.dao.ProductDao; import com.yma16.springcloud.entites.Product; import com.yma16.springcloud.service.ProductService; import com.yma16.springcloud.vo.ProductUpdateVo; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.ArrayList; @Service public class ProductserviceImpl implements ProductService { @Resource private ProductDao productDao; public int create(Product product){ return productDao.create(product); }; public int delete(String id){ return productDao.delete(id); } public int update(ProductUpdateVo productUpdateVo){ return productDao.update(productUpdateVo); } public ArrayList<Product> search(Product product){ return productDao.search(product); } public ArrayList<Product> getList(){ return productDao.getList(); } }
mapper
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.yma16.springcloud.dao.ProductDao"> <!-- 添加产品--> <insert id="create" parameterType="com.yma16.springcloud.entites.Product" useGeneratedKeys="true" keyProperty="id"> insert into product(id,name,kind,description,url,front,back,create_time,relate_user_id,relate_user_name) values(#{id},#{name},#{kind},#{description},#{url},#{front},#{back},#{create_time},#{relate_user_id},#{relate_user_name}); </insert> <!-- 查询产品--> <resultMap id="searchList" type="com.yma16.springcloud.entites.Product"> <id column="name" property="name"/> </resultMap> <select id="search" resultMap="searchList"> select * from product where name=#{name} and kind=#{kind}; </select> <resultMap id="productList" type="com.yma16.springcloud.entites.Product"> <id column="id" property="id"/> </resultMap> <select id="getList" resultMap="productList"> select * from product; </select> <!-- 更新--> <update id="update" parameterType="com.yma16.springcloud.entites.Product"> update product set url=#{url},name=#{name},kind=#{kind},front=#{front},description=#{description},back=#{back},update_time=#{update_time} where id=#{id}; </update> <!-- 删除--> <delete id="delete" parameterType="com.yma16.springcloud.entites.Product"> delete from product where id=#{id}; </delete> </mapper>
controller
package com.yma16.springcloud.controller; import com.yma16.springcloud.entites.CommonResult; import com.yma16.springcloud.entites.Product; import com.yma16.springcloud.service.ProductService; import com.yma16.springcloud.vo.ProductUpdateVo; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Date; import java.util.UUID; @RestController @Slf4j public class ProductController { @Resource private ProductService productService; @PostMapping(value="product/add") public CommonResult addProduct(@RequestBody Product product){ Product createVo=new Product(); UUID uid=UUID.randomUUID(); createVo.setId(uid.toString()); createVo.setUrl(product.getUrl()); createVo.setName(product.getName()); createVo.setKind(product.getKind()); createVo.setDescription(product.getDescription()); createVo.setBack(product.getBack()); createVo.setFront(product.getFront()); createVo.setCreate_time(new Date()); int result=productService.create(createVo); if(result>0){ return new CommonResult(200,"创建成功",createVo); } else{ return new CommonResult(0,"失败",null); } } @PostMapping(value="product/search") public CommonResult searchProduct(@RequestBody Product product){ ArrayList<Product> result=productService.search(product); if(result!=null){ return new CommonResult(200,"查询成功",result); } else{ return new CommonResult(0,"失败",null); } }; @GetMapping(value="product/list") public CommonResult getProductList(){ ArrayList<Product> productList=productService.getList(); if(!productList.isEmpty()){ return new CommonResult(200,"获取成功",productList); } else{ return new CommonResult(0,"失败",null); } }; @DeleteMapping(value="product/delete/{id}") public CommonResult deleteProductById(@PathVariable("id") String id){ int result=productService.delete(id); if(result>0){ return new CommonResult(200,"删除成功",result); } else{ return new CommonResult(0,"失败",null); } } @PutMapping(value="product/update") public CommonResult updateProduct(@RequestBody ProductUpdateVo productUpdateVo){ productUpdateVo.setUpdate_time(new Date()); int result=productService.update(productUpdateVo); if(result>0){ return new CommonResult(200,"更新成功",productUpdateVo); } else{ return new CommonResult(0,"失败",null); } } }
postman测试
没问题!
结尾
本文分享spring+mybatis_编写一个简单的增删改查接口到此结束
如有不足或者错误欢迎指出!
感谢你的阅读!