mysql8+mybatis-plus3.1自动生成带lombok和swagger和增删改查接口

mybatis-dsc-generator是一个集成Lombok和Swagger的代码生成工具,旨在简化注释和基本接口实现。它能自动生成entity、XML、SERVICE、SERVICE_IMPL和CONTROLLER,支持Mybatis-Plus,并且要求数据表有表注释和主键id,字段需注释。源码可在GitHub和码云找到,使用方法参考TestMain.java。

mybatis-dsc-generator

完美集成lombok,swagger的代码生成工具,让你不再为繁琐的注释和简单的接口实现而烦恼:entity集成,格式校验,swagger; dao自动加@ mapper,service自动注释和依赖; 控制器实现单表的增副改查,并实现swaggers的api文档。

源码地址

MAVEN地址

2.1.0版本是未集成Mybatis-plus版本——源码分支master

<dependency>
    <groupId>com.github.flying-cattle</groupId>
    <artifactId>mybatis-dsc-generator</artifactId>
    <version>2.1.0.RELEASE</version>
</dependency>

 3.0.0版本是集成了Mybatis-plus版本——源码分支mybatisPlus

<dependency>
    <groupId>com.github.flying-cattle</groupId>
    <artifactId>mybatis-dsc-generator</artifactId>
    <version>3.0.0.RELEASE</version>
</dependency>

数据表结构样式

CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `login_name` varchar(40) DEFAULT NULL COMMENT '登录名',
  `password` varchar(100) NOT NULL COMMENT '秘密',
  `nickname` varchar(50) NOT NULL COMMENT '昵称',
  `type` int(10) unsigned DEFAULT NULL COMMENT '类型',
  `state` int(10) unsigned NOT NULL DEFAULT '1' COMMENT '状态:-1失败,0等待,1成功',
  `note` varchar(255) DEFAULT NULL COMMENT '备注',
  `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `update_uid` bigint(20) DEFAULT '0' COMMENT '修改人用户ID',
  `login_ip` varchar(50) DEFAULT NULL COMMENT '登录IP地址',
  `login_addr` varchar(100) DEFAULT NULL COMMENT '登录地址',
  PRIMARY KEY (`id`),
  UNIQUE KEY `login_name` (`login_name`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

要求必须有表注释,要求必须有主键为id,所有字段必须有注释(便于生成java注释swagger等)。

生成的实体类

生成方法参考源码中的:https://gitee.com/flying-cattle/mybatis-dsc-generator/blob/master/src/main/java/com/github/mybatis/fl/test/TestMain.java

执行结果

实体类

/**
 * @filename:Order 2018年7月5日
 * @project deal-center  V1.0
 * Copyright(c) 2018 BianP Co. Ltd. 
 * All right reserved. 
 */
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;

/**   
 * Copyright: Copyright (c) 2019 
 * 
 * <p>说明: 用户实体类</P>
 * @version: V1.0
 * @author: BianPeng
 * 
 * Modification History:
 * Date         	Author          Version          Description
 *---------------------------------------------------------------*
 * 2019年4月9日      BianPeng    V1.0         initialize
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(c
<think>我们正在讨论的是使用MyBatis-Plus自动生成包含ControllerService的简单CURD代码。根据引用[1]引用[3],我们可以通过MyBatis-Plus的代码生成器来实现。 步骤概述: 1. 准备数据库表 2. 添加MyBatis-Plus代码生成器依赖 3. 编写代码生成器配置类 4. 运行生成器生成代码 详细步骤: 一、数据库准备(以用户表为例) 假设我们有一个用户表`user`: ```sql CREATE TABLE user ( id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT &#39;主键ID&#39;, name VARCHAR(30) NULL DEFAULT NULL COMMENT &#39;姓名&#39;, age INT(11) NULL DEFAULT NULL COMMENT &#39;年龄&#39;, email VARCHAR(50) NULL DEFAULT NULL COMMENT &#39;邮箱&#39;, PRIMARY KEY (id) ); ``` 二、环境准备 1. 创建一个Spring Boot工程。 2. 在`pom.xml`中添加依赖(包括MyBatis-Plus、代码生成器、模板引擎等): ```xml <dependencies> <!-- Spring Boot Web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- MyBatis-Plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>最新版本</version> </dependency> <!-- 代码生成器 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>最新版本</version> </dependency> <!-- 模板引擎(这里使用Freemarker) --> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> </dependency> <!-- 数据库驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> </dependencies> ``` 注意:请替换最新版本为实际版本号,例如:3.5.13. 配置`application.yml`(数据源等): ```yaml spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/your_database?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8 username: root password: your_password ``` 三、配置代码生成器 创建一个代码生成器类,例如`CodeGenerator`: ```java import com.baomidou.mybatisplus.generator.FastAutoGenerator; import com.baomidou.mybatisplus.generator.config.OutputFile; import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine; import java.util.Collections; public class CodeGenerator { public static void main(String[] args) { FastAutoGenerator.create("jdbc:mysql://localhost:3306/your_database?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8", "root", "your_password") .globalConfig(builder -> { builder.author("your_name") // 设置作者 .enableSwagger() // 开启swagger模式 .fileOverride() // 覆盖已生成文件 .outputDir("D://code"); // 指定输出目录 }) .packageConfig(builder -> { builder.parent("com.example") // 设置父包名 .moduleName("demo") // 设置父包模块名 .pathInfo(Collections.singletonMap(OutputFile.xml, "D://code")); // 设置mapperXml生成路径 }) .strategyConfig(builder -> { builder.addInclude("user") // 设置需要生成的表名 .addTablePrefix("t_", "c_"); // 设置过滤表前缀 // 设置实体类配置 builder.entityBuilder() .enableLombok(); // 使用lombok // 设置Controller配置 builder.controllerBuilder() .enableRestStyle(); // 开启生成@RestController控制器 // 设置Service配置 builder.serviceBuilder() .formatServiceFileName("%sService"); // 设置Service接口名称 }) .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 .execute(); } } ``` 四、运行生成器 运行`CodeGenerator`类的main方法,即可生成代码。生成的代码将包含: - 实体类(Entity) - Mapper接口Mapper- Service接口Service实现类(ServiceImpl) - Controller类 五、测试生成的代码 生成后,将生成的代码复制到项目中,然后启动Spring Boot应用,即可通过Controller进行CURD操作。 注意:如果使用lombok,确保安装了lombok插件,并在项目中添加了lombok依赖。 常见问题: 1. 如果生成代码时出现表找不到,检查数据库连接信息是否正确。 2. 如果项目启动时出现Mapper扫描不到的问题,确保在启动类上添加了`@MapperScan`注解,指定Mapper接口所在的包。 例如,在启动类上添加: ```java @SpringBootApplication @MapperScan("com.example.demo.mapper") public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 这样,我们就完成了使用MyBatis-Plus代码生成器生成包含ControllerService的CURD代码的过程。 相关问题: 1. MyBatis-Plus代码生成器支持哪些模板引擎? 2. 如何自定义生成的代码模板? 3. 生成代码后如何进行分页查询? </think>### 使用 MyBatis-Plus 生成完整 CURD 代码(含 Controller/Service) 以下是详细步骤,基于 Spring Boot 3 MyBatis-Plus 5.x: #### 一、环境准备 1. **数据库表准备**(以用户表为例): ```sql CREATE TABLE user ( id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT &#39;主键&#39;, username VARCHAR(50) NOT NULL COMMENT &#39;用户名&#39;, age INT COMMENT &#39;年龄&#39;, email VARCHAR(100) COMMENT &#39;邮箱&#39; ); ``` 2. **添加 pom.xml 依赖**: ```xml <dependencies> <!-- Spring Boot 基础依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- MyBatis-Plus 核心依赖 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3.1</version> </dependency> <!-- 代码生成器依赖 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.5.3.1</version> </dependency> <!-- 模板引擎(推荐Freemarker) --> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> </dependency> <!-- 数据库驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> </dependencies> ``` 3. **配置 application.yml**: ```yaml spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/your_db?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai username: root password: your_password mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 开启SQL日志 global-config: db-config: id-type: AUTO # 主键自增 ``` #### 二、代码生成器配置 创建 `CodeGenerator.java` 生成器类: ```java public class CodeGenerator { public static void main(String[] args) { FastAutoGenerator.create( "jdbc:mysql://localhost:3306/your_db", "root", "your_password" ) .globalConfig(builder -> { builder.author("YourName") // 作者 .enableSwagger() // 开启swagger .outputDir(System.getProperty("user.dir") + "/src/main/java"); // 输出目录 }) .packageConfig(builder -> { builder.parent("com.example") // 父包名 .moduleName("demo") // 模块名 .entity("entity") // 实体包 .service("service") // service.serviceImpl("service.impl")// service实现包 .controller("controller") // controller包 .mapper("mapper"); // mapper包 }) .strategyConfig(builder -> { builder.addInclude("user") // 要生成的表名 .addTablePrefix("t_", "sys_") // 过滤表前缀 // Controller配置 .controllerBuilder() .enableRestStyle() // 生成@RestController // Service配置 .serviceBuilder() .formatServiceFileName("%sService") // 实体类配置 .entityBuilder() .enableLombok() // 使用Lombok .enableTableFieldAnnotation() // 字段注解 .versionColumnName("version") // 乐观锁字段 .logicDeleteColumnName("deleted"); // 逻辑删除字段 }) .templateEngine(new FreemarkerTemplateEngine()) // 模板引擎 .execute(); } } ``` #### 三、运行生成器 执行 `CodeGenerator.main()` 方法后,将自动生成以下文件: ``` src/main/java └── com └── example └── demo ├── controller │ └── UserController.java # RESTful API ├── entity │ └── User.java # 实体类 ├── mapper │ ├── UserMapper.java # Mapper接口 │ └── UserMapper.xml # XML映射文件 └── service ├── UserService.java # Service接口 └── impl └── UserServiceImpl.java # Service实现 ``` #### 四、生成代码示例 1. **Controller 自动生成**: ```java @RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @PostMapping public R save(@RequestBody User user) { return R.ok().data(userService.save(user)); } @DeleteMapping("/{id}") public R delete(@PathVariable Long id) { return R.ok().data(userService.removeById(id)); } @PutMapping public R update(@RequestBody User user) { return R.ok().data(userService.updateById(user)); } @GetMapping("/{id}") public R getById(@PathVariable Long id) { return R.ok().data(userService.getById(id)); } @GetMapping("/list") public R list() { return R.ok().data(userService.list()); } } ``` 2. **Service 层自动继承 CURD 方法**: ```java public interface UserService extends IService<User> {} @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {} ``` #### 五、启动与测试 1. 在启动类添加注解: ```java @SpringBootApplication @MapperScan("com.example.demo.mapper") public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 2. 测试接口: ```bash # 新增用户 curl -X POST http://localhost:8080/user \ -H "Content-Type: application/json" \ -d &#39;{"username":"test", "age":25, "email":"test@example.com"}&#39; # 查询全部用户 curl http://localhost:8080/user/list ``` #### 注意事项 1. **字段更新问题**:若需将字段更新为 `null`,需在实体类字段添加注解: ```java @TableField(updateStrategy = FieldStrategy.IGNORED) private String email; ``` 否则MyBatis-Plus会忽略null字段[^2] 2. **分页配置**:如需分页功能,添加分页拦截器: ```java @Configuration public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor paginationInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); return interceptor; } } ``` --- ### 相关问题 1. **如何自定义 MyBatis-Plus 生成的 Controller 模板?** 2. **生成代码后如何进行字段校验统一响应封装?** 3. **MyBatis-Plus 乐观锁逻辑删除的实现原理是什么?** 4. **如何扩展自动生成Service 层方法?**
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kin_bug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值