Mybatis-Plus代码生成器
【问题描述】
在微服务的开发过程中,每次新创建一个微服务项目的时候,都需要手工添加controller、service、entity和mapper文件夹和文件时会比较麻烦,并且增加不少的工作量。
是否有一个模块,可以自动生成对应的目录和文件呢?真的有这样的代码生产器文件:
一、使用之前先确认POM文件中下面的依赖已经存在;
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1.tmp</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.1.tmp</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.2</version>
</dependency>
如果SpringBoot是3.X的版本,就需要引用更高的版本:
<!-- mybatis plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.5</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.5</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
二、然后,再把下面的文件拷贝到工程目录下面,运行main方式即可生产;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
// 演示例子,执行 main 方法控制台输入模块表名回车自动生成对应项目目录中
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("D:\\zjbjsgjProjects\\sgj-xxx\\src\\main\\java\\com\\xxx\\xxxx");
gc.setFileOverride(false);
gc.setServiceName("%sService");
gc.setIdType(IdType.ID_WORKER_STR);
gc.setDateType(DateType.ONLY_DATE);
gc.setSwagger2(true);
gc.setAuthor("long");
gc.setOpen(false);
mpg.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://192.168.98.xxx:3306/xxxxxxxx?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("xxxxxx");
dsc.setDbType(DbType.MYSQL);
mpg.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setModuleName("mybatisplus");
pc.setParent("com.xxx.xxx.xxx");
pc.setController("controller");
pc.setEntity("entity");
pc.setService("service");
pc.setMapper("mapper");
mpg.setPackageInfo(pc);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel); // 数据库表映射到实体的命名策略
strategy.setTablePrefix(pc.getModuleName() + "_"); // 生成实体时去掉表前缀
strategy.setColumnNaming(NamingStrategy.underline_to_camel); // 数据库表字段映射到实体的命名策略
strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter链式操作
strategy.setRestControllerStyle(true); // restful api风格控制器
strategy.setControllerMappingHyphenStyle(true); // url中驼峰转连字符
mpg.setStrategy(strategy);
// 执行
mpg.execute();
}
}
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
下面是SpringBoot3.3.2+JDK17的环境下面的代码生成器工具类:
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.util.Collections;
/**
* <p>
* MyBatis-Plus代码生成器
* </p>
*
* @author Patrick
* @since 2024-07-02
*/
public class CodeGenerator {
public static void main(String[] args) {
FastAutoGenerator.create("jdbc:mysql://localhost:3306/xxx?serverTimezone=Asia/Shanghai", "root", "xxx")
//~~~~~~~~~~~~~~~Part1: 全局配置~~~~~~~~~~开始~~~~~~~~~~
.globalConfig((scanner, builder) -> {
builder.author("Patrick") // 设置作者
//.enableSwagger() // 开启 swagger 模式
.outputDir(System.getProperty("user.dir") + "/src/main/java")
.commentDate("yyyy-MM-dd")
.disableOpenDir(); //禁止打开文件目录,默认false
})
//~~~~~~~~~~~~~~~全局配置~~~~~~~~~~结束~~~~~~~~~~
//~~~~~~~~~~~~~~~Part2: 包配置~~~~~~~~~~开始~~~~~~~~~~
.packageConfig((scanner, builder) -> {
builder.parent("com.xxx.yyy.zzz")
.moduleName(null)
.entity("entity")
.service("service")
.serviceImpl("service.impl")
.mapper("mapper")
.xml("mapper.xml")
.controller("controller")
.pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir") + "/src/main/resources/mapper"));
})
//~~~~~~~~~~~~~~~包配置~~~~~~~~~~结束~~~~~~~~~~
//~~~~~~~~~~~~~~~Part3: 策略配置~~~~~~~~~~开始~~~~~~~~~~
.strategyConfig((scanner, builder) -> builder
/**
* 实体配置
*/
.entityBuilder()
//.superClass(SuperCommomPO.class) // 设置实体类父类-父类中存在的字段不会在实体类中存在
.enableLombok()
.naming(NamingStrategy.underline_to_camel)// 数据表映射实体命名策略:默认下划线转驼峰underline_to_camel
.columnNaming(NamingStrategy.underline_to_camel)// 表字段映射实体属性命名规则:默认null,不指定按照naming执行
//.idType(IdType.AUTO)// 添加全局主键类型
.formatFileName("%s")// 格式化实体名称,%s取消首字母I,
/**
* mapper配置
*/
.mapperBuilder()
//.enableMapperAnnotation()// 开启mapper注解
.enableBaseResultMap()// 启用xml文件中的BaseResultMap 生成
//.enableBaseColumnList()// 启用xml文件中的BaseColumnList
.formatMapperFileName("%sMapper")// 格式化Mapper类名称
.formatXmlFileName("%sMapper")// 格式化xml文件名称
/**
* service配置
*/
.serviceBuilder()
.formatServiceFileName("%sService")// 格式化 service 接口文件名称
.formatServiceImplFileName("%sServiceImpl")// 格式化 service 接口文件名称
.controllerBuilder()
.enableRestStyle()
//~~~~~~~~~~~~~~~策略配置~~~~~~~~~~结束~~~~~~~~~~
.build())
// 使用Freemarker引擎模板,默认的是Velocity引擎模板
.templateEngine(new FreemarkerTemplateEngine())
.execute();
}
}

浙公网安备 33010602011771号