不想写增删改查接口?

我真的是懒啊,是真不想写增删改查接口,所以试着写了一套通用增删改查(默认实现,复杂的需要自行重写方法),主要是由EntityControllerEntityServiceEntityServiceImpl完成。只要按规范继承了相关类,即可拥有增删改查功能。真就建好表,不用写一行代码就实现基础的增删改查。仓库:wonder-server

相关说明

核心

  • EntityController 提供6个基础的增删改查接口
  • EntityService 定义基础的接口
  • EntityServiceImpl 提供默认实现

就拿图书表简单的举个例子

  1. 建立一张数据库表

    sql 复制代码
    CREATE TABLE `ex_book` (
      `id` bigint NOT NULL,
      `name` varchar(20) DEFAULT NULL COMMENT '名称',
      `number` int DEFAULT NULL COMMENT '数量',
      `status` int DEFAULT NULL COMMENT '状态 0-维护中,1-正常,2-借出',
      `price` decimal(8,2) DEFAULT NULL COMMENT '单价',
      `create_time` datetime DEFAULT NULL COMMENT '创建时间',
      `create_by` bigint DEFAULT NULL COMMENT '创建人',
      `update_time` datetime DEFAULT NULL COMMENT '更新时间',
      `update_by` bigint DEFAULT NULL COMMENT '更新人',
      `deleted` bit(1) DEFAULT NULL COMMENT '已删除',
      PRIMARY KEY (`id`) USING BTREE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC COMMENT='图书管理';
  2. 生成代码,来到wonder-generator模块com.gitee.whzzone.generator.Generator,填写好数据库、表、代码生成位置

    java 复制代码
    // 数据库连接配置
    private static final String JDBC_URL = "jdbc:mysql://ip:3306/wonder?useUnicode=true&useSSL=false&characterEncoding=utf8";
    private static final String JDBC_USER_NAME = "root";
    private static final String JDBC_PASSWORD = "123456";
    
    // 包名和模块名
    private static final String PACKAGE_NAME = "com.gitee.whzzone.admin.business";
    private static final String MODULE_NAME = "";
    
    // 表名,多个表使用英文逗号分割
    private static final String[] TBL_NAMES = {"ex_book"};
    
    // 表名的前缀,从表生成代码时会去掉前缀
    private static final String TABLE_PREFIX = "ex_";
  3. 启动main方法即可,会生成如下8个文件,然后启动项目进入项目swagger文档,即可拥有增删改查接口

生成的代码解释

Book.java 实体。继承了BaseEntity,继承一些基础属性,如:id、createTime、updateTime、deleted...等等

BookDto.java 传输对象。继承了EntityDto,也是继承了一些基础属性

BookQuery.java 查询参数。继承了EntityQuery,继承了基础的查询基础属性,排序,分页等

BookController.java controller层。继承了EntityController,里面提供了6个基础接口,包括增删改查、列表、分页查询

BookService.java service层。继承了EntityService,定义了一些基础接口

BookServiceImpl.java service实现。默认实现了service层定义的接口

BookMapper.java mapper层。继承了MyBatis-Plus的BaseMapper

BookMapper.xml mapper对应的xml文件

注解说明

  • @Query 该注解标识该支持字段查询。column-对应的数据库字段,如果为空则取属性名转下划线作为查询字段名。expression标识该字段的查询方式,目前支持精确、模糊、范围、大于、小于等等查询。注意,当expression = ExpressionEnum.BETWEEN即范围查询时,column不能为空,且column的值必须成对存在,否则无法启动。如下配置表示在create_time字段进行范围查询

    java 复制代码
    // 精确查询 等同于 @Query(column = "status", expression = ExpressionEnum.EQ)
    @Query
    @ApiModelProperty("状态 0-维护中,1-正常,2-借出")
    private Integer status;
    java 复制代码
    // 模糊查询 等同于 @Query(column = "name", expression = ExpressionEnum.LIKE)
    @Query(expression = ExpressionEnum.LIKE)
    @ApiModelProperty("书名")
    private String name;
    java 复制代码
    // 范围查询 create_time
    @Query(column = "create_time", expression = ExpressionEnum.BETWEEN)
    @ApiModelProperty("开始时间")
    private Date startDate;
    
    @Query(column = "create_time", expression = ExpressionEnum.BETWEEN)
    @ApiModelProperty("结束时间")
    private Date endDate;
  • @SaveField 该注解标识该属性为可添加字段。默认提供的添加接口只提取带有该注解的属性。

  • @UpdateField 该注解标识该属性为可编辑字段。默认提供的编辑接口只提取带有该注解的属性。

参数校验组

  • CreateGroup.class 默认提供的添加接口会校验该分组

  • UpdateGroup.clas 默认提供的编辑接口会校验该分组

    java 复制代码
    @SaveField
    @UpdateField
    @NotBlank(message = "收货人不能为空", groups = {CreateGroup.class, UpdateGroup.class})
    @ApiModelProperty("收货人姓名")
    private String receiverName;

接口代码流程

添加或更新

  1. 进入beforeSaveOrUpdateHandler(dto)方法,可以对'增改'接口参数进行统一处理
  2. '增'接口进入beforeSaveHandler(dto),'改'接口进入beforeUpdateHandler(dto),分别对参数进行处理
  3. 复制带有XxxDto中带有@SaveField 或者@UpdateField的属性给实体
  4. 执行更新updateById(entity)或插入save(entity)操作
  5. 执行afterSaveHandler(entity)方法,可在此进行添加或更新的后置处理

单条查询

  1. 执行getById(id)
  2. 执行afterQueryHandler(entity, queryHandler),根据不同的需求使用不同的处理器对响应的数据进行处理,返回dto

列表、分页查询

  1. 进入handleQueryWrapper(query)方法,处理查询的信息,分页信息等
  2. 执行page(queryWrapper)查询或list(queryWrapper)
  3. 执行afterQueryHandler(list, queryHandler),根据不同的需求使用不同的处理器对响应的数据进行处理

删除

  1. 执行removeById(id)
  2. 执行afterDeleteHandler(entity) 可在此处做删除的后置操作

仓库:wonder-server

相关推荐
编程洪同学18 分钟前
Spring Boot 中实现自定义注解记录接口日志功能
android·java·spring boot·后端
GraduationDesign1 小时前
基于SpringBoot的蜗牛兼职网的设计与实现
java·spring boot·后端
颜淡慕潇1 小时前
【K8S问题系列 | 20 】K8S如何删除异常对象(Pod、Namespace、PV、PVC)
后端·云原生·容器·kubernetes
customer081 小时前
【开源免费】基于SpringBoot+Vue.JS安康旅游网站(JAVA毕业设计)
java·vue.js·spring boot·后端·kafka·开源·旅游
搬码后生仔2 小时前
将 ASP.NET Core 应用程序的日志保存到 D 盘的文件中 (如 Serilog)
后端·asp.net
Suwg2092 小时前
《手写Mybatis渐进式源码实践》实践笔记(第七章 SQL执行器的创建和使用)
java·数据库·笔记·后端·sql·mybatis·模板方法模式
凡人的AI工具箱3 小时前
每天40分玩转Django:Django文件上传
开发语言·数据库·后端·python·django
spcodhu4 小时前
在 Ubuntu 上搭建 MinIO 服务器
linux·后端·minio
小码编匠4 小时前
2024 年各编程语言运行百万并发任务需多少内存?
java·后端·python
小码编匠4 小时前
C# 实现多线程启动停止暂停继续
后端·c#·.net