Mybatis-Plus可通过代码自动生成实体类、Mapper、Service、Controller等
为了快速创建代码,可使用Mybatis-Plus帮我们自动创建
- 在POM中添加依赖
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.2</version>
</dependency>
<!--代码生成-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.2.0</version>
</dependency>
<!--代码生成使用的模版引擎-->
<dependency>
<groupId>com.ibeetl</groupId>
<artifactId>beetl</artifactId>
<version>2.9.3</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.31</version>
</dependency>
-
创建一个代码生成器的类 创建一个自动生成器
AutoGenerator autoGenerator = new AutoGenerator();
-
设置数据库链接配置,可根据数据库中的表来自动生成哪些表对应的类 ,并将配置放进autoGenerator中
//配置数据库链接 DataSourceConfig dataSourceConfig= new DataSourceConfig(); dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/ttt?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true"); dataSourceConfig.setUsername("root"); dataSourceConfig.setPassword("root"); dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver"); dataSourceConfig.setTypeConvert(new MySqlTypeConvert(){ @Override public DbColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) { //将数据库中的特殊类型转换成想要的类型 //将数据库中datetime转换成DATE if ( fieldType.toLowerCase().contains("datetime") ) { return DbColumnType.DATE; } return (DbColumnType) super.processTypeConvert(globalConfig, fieldType); } }); autoGenerator.setDataSource(dataSourceConfig);
-
公共配置 :配置项目的路径(用于生成文件时将文件生成的位置) ,设置文件生成是否覆盖,设置文件生成的名字样式等,并将配置放进autoGenerator中
//公用配置 GlobalConfig globalConfig= new GlobalConfig(); globalConfig.setOutputDir(PROJECTPATH + "/src/main/java"); globalConfig.setAuthor("xxx"); //日期类型的字段使用哪个类型,默认是 java8的 日期类型,此处改为 java.util.date globalConfig.setDateType(DateType.ONLY_DATE); //是否覆盖 已存在文件,默认 false 不覆盖 globalConfig.setFileOverride(true); //mapper.xml 是否生成 ResultMap,默认 false 不生成 globalConfig.setBaseResultMap(true); //mapper.xml 是否生成 ColumnList,默认 false 不生成 globalConfig.setBaseColumnList(true); globalConfig.setMapperName("%sMapper"); globalConfig.setServiceName("%sService"); globalConfig.setXmlName("%sMapper"); autoGenerator.setGlobalConfig(globalConfig);
-
包配置:设置文件生成的具体包 比如实体类生成在基础包(com.test.swagger)下的bean包下,并将配置放进autoGenerator中
PackageConfig pc = new PackageConfig(); pc.setParent(PACKAGE);//设置基础包 // pc.setModuleName("bean"); 子模块包名,最终生成的是类似 com.zhiyi.tiku.entity 这样的 不用写, 默认就是 entity pc.setEntity("bean"); pc.setController("controller"); pc.setService("service"); pc.setMapper("mapper"); autoGenerator.setPackageInfo(pc);
-
策略配置:设置命名方式,生成字段是否添加注解 ,是否启用 Lombok,并将配置放进autoGenerator中
StrategyConfig strategy = new StrategyConfig(); // 此处配置为 下划线转驼峰命名 strategy.setNaming(NamingStrategy.underline_to_camel); //生成的字段 是否添加注解,默认false strategy.setEntityTableFieldAnnotationEnable(true); //表前缀,配置后 生成的的代码都会把前缀去掉 strategy.setTablePrefix("t_"); //是否启用 Lombok strategy.setEntityLombokModel(true); //是否启用 builder 模式 例:new DevDevice().setDealerId("").setDeviceCode(""); strategy.setEntityBuilderModel(true); autoGenerator.setStrategy(strategy);
-
模板配置:可设置什么类生成 ,什么类不生成
TemplateConfig templateConfig = new TemplateConfig(); //不生成什么就设置为null值 templateConfig.setController(null); templateConfig.setService(null); templateConfig.setServiceImpl(null); templateConfig.setMapper(null); templateConfig.setXml(null); autoGenerator.setTemplate(templateConfig);
-
模板引擎配置:MyBatis-Plus 支持 Velocity(默认)、Freemarker、Beetl,用户可以选择自己熟悉的模板引擎,如果都不满足您的要求,可以采用自定义模板引擎。
autoGenerator.setTemplateEngine(new BeetlTemplateEngine());
-
自动生成器执行
autoGenerator.execute();
Mybatis-Plus学习路径:https://mp.baomidou.com/guide/
整体代码
package com.test.swagger;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.BeetlTemplateEngine;
public class CodeGenerator {
/**
* 获取项目目录
*/
private static final String PROJECTPATH = System.getProperty("user.dir");
/**
* 项目基础包
*/
private static final String PACKAGE = "com.test.swagger";
public static void main(String[] args) {
//自动生成器
AutoGenerator autoGenerator = new AutoGenerator();
//配置数据库链接
DataSourceConfig dataSourceConfig= new DataSourceConfig();
dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/ttt?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true");
dataSourceConfig.setUsername("root");
dataSourceConfig.setPassword("root");
dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
dataSourceConfig.setTypeConvert(new MySqlTypeConvert(){
@Override
public DbColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
//将数据库中的特殊类型转换成想要的类型
//将数据库中datetime转换成DATE
if ( fieldType.toLowerCase().contains("datetime") ) {
return DbColumnType.DATE;
}
return (DbColumnType) super.processTypeConvert(globalConfig, fieldType);
}
});
autoGenerator.setDataSource(dataSourceConfig);
//公用配置
GlobalConfig globalConfig= new GlobalConfig();
globalConfig.setOutputDir(PROJECTPATH + "/src/main/java");
globalConfig.setAuthor("xxx");
//日期类型的字段使用哪个类型,默认是 java8的 日期类型,此处改为 java.util.date
globalConfig.setDateType(DateType.ONLY_DATE);
//是否覆盖 已存在文件,默认 false 不覆盖
globalConfig.setFileOverride(true);
//mapper.xml 是否生成 ResultMap,默认 false 不生成
globalConfig.setBaseResultMap(true);
//mapper.xml 是否生成 ColumnList,默认 false 不生成
globalConfig.setBaseColumnList(true);
globalConfig.setMapperName("%sMapper");
globalConfig.setServiceName("%sService");
globalConfig.setXmlName("%sMapper");
autoGenerator.setGlobalConfig(globalConfig);
PackageConfig pc = new PackageConfig();
pc.setParent(PACKAGE);
// pc.setModuleName("bean"); 子模块包名,最终生成的是类似 com.zhiyi.tiku.entity 这样的 不用写, 默认就是 entity
pc.setEntity("bean");
pc.setController("controller");
pc.setService("service");
pc.setMapper("mapper");
autoGenerator.setPackageInfo(pc);
StrategyConfig strategy = new StrategyConfig();
// 此处配置为 下划线转驼峰命名
strategy.setNaming(NamingStrategy.underline_to_camel);
//生成的字段 是否添加注解,默认false
strategy.setEntityTableFieldAnnotationEnable(true);
//表前缀,配置后 生成的的代码都会把前缀去掉
strategy.setTablePrefix("t_");
//是否启用 Lombok
strategy.setEntityLombokModel(true);
//是否启用 builder 模式 例:new DevDevice().setDealerId("").setDeviceCode("");
strategy.setEntityBuilderModel(true);
autoGenerator.setStrategy(strategy);
TemplateConfig templateConfig = new TemplateConfig();
//不生成什么就设置为null值
templateConfig.setController(null);
templateConfig.setService(null);
templateConfig.setServiceImpl(null);
templateConfig.setMapper(null);
templateConfig.setXml(null);
autoGenerator.setTemplate(templateConfig);
//使用beetl模版引擎
autoGenerator.setTemplateEngine(new BeetlTemplateEngine());
autoGenerator.execute();
}
}