不想写增删改查接口?

我真的是懒啊,是真不想写增删改查接口,所以试着写了一套通用增删改查(默认实现,复杂的需要自行重写方法),主要是由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

相关推荐
Bs_MoneyMagnet2 小时前
基于springboot+vue的滑雪场票务与装备租赁系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·spring·毕业设计·计算机毕业设计
AlienZHOU6 小时前
AI Coding 时代下,我的技术面试实践分享
前端·后端·面试
李昊哲小课8 小时前
Spring Boot SSE 实时推送教程
spring boot·websocket·flux·sseemitter
狗头大军之江苏分军9 小时前
《潮水漫过十七岁》开学了
后端
苏三说技术9 小时前
如何看待GPT-6在UP主众测中碾压夺冠?它是现在最强大模型吗?
后端
mldong10 小时前
一份 JSON,一条能跑的审批流:把报销流程送上工作流引擎
后端·架构
wno70410 小时前
Spring Boot WebFlux增删改查
java·spring boot·后端
Captaincc10 小时前
AI用量v0.1.11更新发布 新增 jusage doctor 诊断指令 托盘展示token 和余额 新增 AutoClaw 支持
前端·后端·vibecoding
aramae11 小时前
模拟实现strlen()函数 (C语言)
c语言·开发语言·后端
行百里er12 小时前
Spring Insight 里如何把 Span 收成一条链路
spring boot·spring cloud·监控