不想写增删改查接口?

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

相关推荐
mit6.8241 分钟前
[Redis#4] string | 常用命令 | + mysql use:cache | session
数据库·redis·后端·缓存
《源码好优多》4 分钟前
基于Java Springboot未央商城管理系统
java·开发语言·spring boot
捂月1 小时前
Spring Boot 核心逻辑与工作原理详解
java·spring boot·后端
Nightselfhurt1 小时前
RPC学习
java·spring boot·后端·spring·rpc
苹果醋31 小时前
vue3 在哪些方便做了性能提升?
java·运维·spring boot·mysql·nginx
荆州克莱1 小时前
Vue3 源码解析(三):静态提升
spring boot·spring·spring cloud·css3·技术
Estar.Lee8 小时前
查手机号归属地免费API接口教程
android·网络·后端·网络协议·tcp/ip·oneapi
弗拉唐9 小时前
springBoot,mp,ssm整合案例
java·spring boot·mybatis
2401_8576100310 小时前
SpringBoot社团管理:安全与维护
spring boot·后端·安全