当前位置: 移动技术网 > IT编程>开发语言>Java > 如何使用MyBatis-Plus代码生成器(逆向工程)一键生成代码

如何使用MyBatis-Plus代码生成器(逆向工程)一键生成代码

2020年08月01日  | 移动技术网IT编程  | 我要评论

简介

MyBatis-Plus 提供了功能强大的的代码生成器, 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。

官方入门案例: MyBatis-Plus代码生成器

效果演示

1. 创建3张测试表: t_user、people、t_product

在这里插入图片描述

2. 执行MyBatis-Plus代码生成器的代码

在这里插入图片描述

3. 代码生成完成

在这里插入图片描述

详细步骤(可以全程复制, 需要改动的地方会有说明)

1. 引入依赖(SpringBoot工程)

如果还需要自动生成Swagger相关的注解, 自行引入Swagger相关依赖即可

<!--SpringBoot--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!--lombok, 自动生成的时候需要lombok中的注解--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <!--mybatis-plus, 注意引入了此依赖就无需再引入mybatis相关依赖, 否则可能冲突--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.3.0</version> </dependency> <!--mybatis-plus代码生成器--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.3.0</version> </dependency> <!--默认模板引擎velocity, 还支持Freemarker、Beetl, 都需要引入依赖(使用其他引擎详情见官网)--> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.2</version> </dependency> <!--springmvc start, 会自动生成Controller相关注解--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.19</version> </dependency> 
2. 编写MyBatis-Plus代码生成器代码

一般情况需要改动的地方笔者已在注释中写出, 复制粘贴稍加改动即可, 其余代码配置也有较为详细的注释, 可根据需要自行修改

如果此案例并不能满足需要, 详情配置参考官网: MyBatis-Plus代码生成器详细配置

package com.youxuepai.demo.generator; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.baomidou.mybatisplus.generator.AutoGenerator; import com.baomidou.mybatisplus.generator.InjectionConfig; import com.baomidou.mybatisplus.generator.config.*; import com.baomidou.mybatisplus.generator.config.po.TableFill; import com.baomidou.mybatisplus.generator.config.po.TableInfo; import com.baomidou.mybatisplus.generator.config.rules.DateType; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; import java.util.ArrayList; import java.util.List; /**
 * 一般情况, 需要改动的地方:
 * 34行: 作者, 38行: 主键类型, 41行: 是否使用Swagger注解, 44行: 数据源相关, 56行: 生成的代码路径, 65行: 需要映射的表名
 * 71、72行: 逻辑删除和版本号字段, 76、77行: 插入和更新时间的字段, 103行: *Mapper.xml文件生成路径和命名方式
 */ public class CodeGenerator { public static void main(String[] args) { // 代码生成器 AutoGenerator mpg = new AutoGenerator(); // 全局配置 GlobalConfig gc = new GlobalConfig(); String projectPath = System.getProperty("user.dir"); // 项目路径 gc.setOutputDir(projectPath + "/src/main/java"); // 生成的文件路径 gc.setAuthor("ChenJunlin"); gc.setOpen(false); // 是否打开生成的目录 gc.setFileOverride(false); // 是否覆盖已有文件, 默认false gc.setServiceName("%sService"); // 自动生成的Service类前面会自动加前缀I, 取消I前缀 gc.setIdType(IdType.AUTO); // 生成主键得id类型 gc.setDateType(DateType.ONLY_DATE); // 数据库中的时间类型对应的java类, 此设置表示Date类, 默认是java8的时间类 // gc.setSwagger2(true); 实体属性 Swagger2 注解 mpg.setGlobalConfig(gc); // 数据源配置 DataSourceConfig dsc = new DataSourceConfig(); dsc.setUrl("jdbc:mysql://localhost:3306/test?serverTimezone=GMT"); dsc.setDriverName("com.mysql.cj.jdbc.Driver"); dsc.setUsername("root"); dsc.setPassword("root"); dsc.setDbType(DbType.MYSQL); // 设置数据库连接的类型 mpg.setDataSource(dsc); // 包配置 PackageConfig pc = new PackageConfig(); pc.setModuleName(null); // 模块路径(子路径) pc.setParent("com.youxuepai.demo"); // 生存的代码的父路径 pc.setEntity("entity"); // 生存实体类所在的包名 pc.setMapper("mapper"); pc.setService("service"); pc.setController("controller"); mpg.setPackageInfo(pc); // 策略配置 StrategyConfig strategy = new StrategyConfig(); strategy.setInclude("t_user","people","t_product"); // 要生成的表在数据库中的名称, 每张表名以英文逗号隔开 strategy.setNaming(NamingStrategy.underline_to_camel); // 表名转换方式: 数据库中的下划线转成java驼峰 strategy.setColumnNaming(NamingStrategy.underline_to_camel); // 列名转换方式 strategy.setEntityLombokModel(true); // 自动加上lombok注解 strategy.setRestControllerStyle(true); // 加上@RestController注解 strategy.setEntityTableFieldAnnotationEnable(true); // 为实体类的类上加@TableName, 所有字段上加注解 strategy.setControllerMappingHyphenStyle(false); // RequestMapping种的驼峰是否转成用"-"连接, 默认是false strategy.setTablePrefix("t_"); // 按照表名生成实体类时去掉表名前面的"t_"前缀 // strategy.setLogicDeleteFieldName("deleted"); // 数据库中表示逻辑删除的字段名 // strategy.setVersionFieldName("version"); // 数据库中表示乐观锁版本号的字段名 // 自动填充配置: 插入时间, 最后一次更新时间 ArrayList<TableFill> tableFills = new ArrayList<>(); TableFill gmtCreate = new TableFill("created", FieldFill.INSERT); // 插入时改变的时间纪录, created为表的字段名 TableFill gmtModified = new TableFill("updated", FieldFill.INSERT_UPDATE); // 最后一次更新时updated表字段的时间记录 tableFills.add(gmtCreate); tableFills.add(gmtModified); strategy.setTableFillList(tableFills); mpg.setStrategy(strategy); // 自定义配置, 将Mapper.xml文件生成到resources目录下 InjectionConfig cfg = new InjectionConfig() { @Override public void initMap() { // to do nothing } }; // 如果模板引擎是 velocity String templatePath = "/templates/mapper.xml.vm"; // 自定义输出配置 List<FileOutConfig> focList = new ArrayList<>(); // 自定义配置会被优先输出 focList.add(new FileOutConfig(templatePath) { @Override public String outputFile(TableInfo tableInfo) { // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!! return projectPath + "/src/main/resources/mapper/" + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML; } }); cfg.setFileOutConfigList(focList); mpg.setCfg(cfg); // 配置模板 TemplateConfig templateConfig = new TemplateConfig(); templateConfig.setXml(null); mpg.setTemplate(templateConfig); mpg.execute(); } } 
3. 执行代码即可一键生成代码

原创作者: 笔记狂魔

本文地址:https://blog.csdn.net/FutureArchitect/article/details/107713425

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网