spring编写一个crud
背景
大家好,我是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_编写一个简单的增删改查接口到此结束
如有不足或者错误欢迎指出!
感谢你的阅读!