注:MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生
AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。
依赖:
MyBatis-Plus 从 3.0.3 之后移除了代码生成器与模板引擎的默认依赖,需要手动添加相关依赖:
- 添加 代码生成器 依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.0</version>
</dependency>
- 添加 模板引擎 依赖,MyBatis-Plus 支持 Velocity(默认)、Freemarker、Beetl,用户可以选择自己熟悉的模板引擎,如果都不满足您的要求,可以采用自定义模板引擎。
Velocity(默认):
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.1</version>
</dependency>
Freemarker:
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.29</version>
</dependency>
Beetl:
<dependency>
<groupId>com.ibeetl</groupId>
<artifactId>beetl</artifactId>
<version>3.0.16.RELEASE</version>
</dependency>
注意!如果您选择了非默认引擎,需要在 AutoGenerator 中 设置模板引擎。
AutoGenerator generator = new AutoGenerator();
// set freemarker engine
generator.setTemplateEngine(new FreemarkerTemplateEngine());
// set beetl engine
generator.setTemplateEngine(new BeetlTemplateEngine());
// set custom engine (reference class is your custom engine class)
generator.setTemplateEngine(new CustomTemplateEngine());
// other config
...
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>codeGenerator</artifactId>
<version>1.0-SNAPSHOT</version>
<name>codeGenerator</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!-- mybatis-plus begin -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.1</version>
</dependency>
<!-- MyBatis 生成器 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.1.1</version>
</dependency>
<!-- velocity 模板引擎 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.1</version>
</dependency>
<!--Mysql数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>
</dependencies>
</project>
代码生成类
package com.xqd.utils;
import com.baomidou.mybatisplus.annotation.DbType;
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.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;
/**
* @ClassName: CodeGenerator
* @Description: 代码生成器
* 使用mybatis-plus进行代码生成
* @Authror: XQD
* @Date: 2020/1/13 9:24
*/
public class MPCodeGenerator {
//开发人员
private static final String AUTHOR = "XQD";
// 包配置
private static final String PACKAGE_COM = "com.xqd";
// 模块名
private static final String MODULENAME = "";
// 表名称
private static final String DB_TABLE = "xu_student";
public static void main(String[] args) {
// 1.**************创建代码生成器**************
AutoGenerator mpg = new AutoGenerator();
//2.**************全局策略配置**************
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
gc.setOutputDir(projectPath + "/src/main/java");//生成文件的输出目录,默认D盘根目录
gc.setAuthor(AUTHOR); // 开发人员
gc.setOpen(false); // 生成后是否打开资源管理器(目录)
gc.setFileOverride(false); // 重新生成时文件是否覆盖
gc.setServiceName("%sService"); // 去掉Service接口的首字母I
gc.setIdType(IdType.ID_WORKER_STR); // 主键策略
gc.setDateType(DateType.ONLY_DATE);// 定义生成的实体类中日期类型
//gc.setSwagger2(true); // 开启Swagger2模式
mpg.setGlobalConfig(gc);
//3.**************数据源配置**************
DataSourceConfig dsc = new DataSourceConfig();
dsc.setDbType(DbType.MYSQL);
dsc.setUrl("jdbc:mysql://localhost:3306/xqd_database?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false");
dsc.setDriverName("com.mysql.cj.jdbc.Driver"); // 驱动名称
dsc.setUsername("root"); // 用户名
dsc.setPassword("123456"); // 密码
mpg.setDataSource(dsc);
//4.**************包配置**************
PackageConfig pc = new PackageConfig();
pc.setModuleName(MODULENAME); // 模块名
pc.setParent(PACKAGE_COM);
pc.setController("controller");
pc.setEntity("entity");
pc.setService("service");
pc.setMapper("mapper");
mpg.setPackageInfo(pc);
//5.**************自定义配置**************
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
}
};
// 如果模板引擎是 freemarker
//String templatePath = "/templates/mapper.xml.ftl";
// 如果模板引擎是 velocity(默认)
String templatePath = "/templates/mapper.xml.vm";
//自定义输出配置
List<FileOutConfig> focList = new ArrayList<>();
//自定义配置会被优先输出
focList.add(new FileOutConfig(templatePath) {
@Override
public String outputFile(TableInfo tableInfo) {
return projectPath + "/src/main/resources/mapper/" + pc.getModuleName()
+ "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
}
});
cfg.setFileOutConfigList(focList);
mpg.setCfg(cfg);
// 关闭默认 xml 生成,调整生成 至 根目录(resources)
TemplateConfig tc = new TemplateConfig();
tc.setXml(null);
mpg.setTemplate(tc);
//6.策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setInclude(DB_TABLE); // 表名称
strategy.setNaming(NamingStrategy.underline_to_camel);// 数据库表映射到实体的命名策略
strategy.setColumnNaming(NamingStrategy.underline_to_camel);// 数据库表字段映射到实体的命名策略,未指定按照 naming 执行
strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter链式操作
//strategy.setRestControllerStyle(true); // restful api风格控制器
strategy.setControllerMappingHyphenStyle(true); // url中驼峰转连字符
strategy.setTablePrefix(pc.getModuleName() + "xu_"); // 生成实体时去掉表前缀
mpg.setStrategy(strategy);
// **************执行**************
mpg.execute();
}
}
展示图