添加依賴
<properties>
<mybatis-plus-generator.version>3.2.0</mybatis-plus-generator.version>
<velocity.version>2.1</velocity.version>
<freemarker.version>2.3.29</freemarker.version>
<ibeetl.version>3.0.13.RELEASE</ibeetl.version>
<junit.version>4.12</junit.version>
</properties>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>${mybatis-plus-generator.version}</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>${velocity.version}</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>${freemarker.version}</version>
</dependency>
<dependency>
<groupId>com.ibeetl</groupId>
<artifactId>beetl</artifactId>
<version>${ibeetl.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>compile</scope>
</dependency>
工具類
package com.zzf.springboot.util;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import org.junit.Test;
/**
* 運(yùn)行此方法生成mybatis代碼
* 生成代碼自動(dòng)放入對(duì)應(yīng)目錄
* @author wangshu
* @create 2019/10/18
*/
public class MyBatisGeneratorRun {
//數(shù)據(jù)庫(kù)類型
private final DbType dbType = DbType.MYSQL;
//數(shù)據(jù)庫(kù)連結(jié)信息
private final String dbUrl = "jdbc:mysql://localhost:3306/zzf?useUnicode=true&characterEncoding=UTF-8";
private final String driver = "com.mysql.jdbc.Driver";
private final String userName = "root";
private final String password = "root";
//項(xiàng)目名
private final String projectName = "spring-boot";
//指定包名
private final String packageName = "com.zzf.springboot";
//controller基礎(chǔ)類
private final String superControllerClass = packageName + ".common.BaseController";
//entity基礎(chǔ)類
private final String superEntityClass = packageName + ".common.BaseEntity";
//模塊名 如果有模塊名梳毙,則需在模塊名前加. 例:.log
private final String moduleName = "";
//作者名
private final String author = "zhuzhifeng";
//指定生成的表名
private final String[] tableNames = new String[]{"sys_role"};
@Test
public void generateCode() {
//serviceNameStartWithI:user -> UserService, 設(shè)置成true: user -> IUserService
generateByTables(false, packageName, tableNames);
}
/**
* 根據(jù)表自動(dòng)生成
* @param serviceNameStartWithI 默認(rèn)為false
* @param packageName 包名
* @param tableNames 表名
* @author Terry
*/
private void generateByTables(boolean serviceNameStartWithI, String packageName, String... tableNames) {
//配置數(shù)據(jù)源
DataSourceConfig dataSourceConfig = getDataSourceConfig();
// 策略配置
StrategyConfig strategyConfig = getStrategyConfig(tableNames);
//全局變量配置
GlobalConfig globalConfig = getGlobalConfig(serviceNameStartWithI);
//包名配置
PackageConfig packageConfig = getPackageConfig(packageName);
//自動(dòng)生成
atuoGenerator(dataSourceConfig, strategyConfig, globalConfig, packageConfig);
}
/**
* 集成
* @param dataSourceConfig 配置數(shù)據(jù)源
* @param strategyConfig 策略配置
* @param config 全局變量配置
* @param packageConfig 包名配置
* @author Terry
*/
private void atuoGenerator(DataSourceConfig dataSourceConfig, StrategyConfig strategyConfig, GlobalConfig config, PackageConfig packageConfig) {
new AutoGenerator()
.setGlobalConfig(config)
.setDataSource(dataSourceConfig)
.setStrategy(strategyConfig)
.setPackageInfo(packageConfig)
.setTemplateEngine(new FreemarkerTemplateEngine())
.execute();
}
/**
* 設(shè)置包名
* @param packageName 父路徑包名
* @param packageName 模塊名
* @return PackageConfig 包名配置
* @author Terry
*/
private PackageConfig getPackageConfig(String packageName) {
return new PackageConfig()
.setParent(packageName)
.setXml("mapper.xml")
.setMapper("mapper")
.setController("controller")
.setEntity("entity");
}
/**
* 全局配置
* @param serviceNameStartWithI false
* @return GlobalConfig
* @author Terry
*/
private GlobalConfig getGlobalConfig(boolean serviceNameStartWithI) {
GlobalConfig globalConfig = new GlobalConfig();
globalConfig
.setBaseColumnList(true)
.setBaseResultMap(true)
.setActiveRecord(false)
//作者
.setAuthor(author)
//設(shè)置輸出路徑
.setOutputDir(getOutputDir(projectName))
.setFileOverride(true);
if (!serviceNameStartWithI) {
//設(shè)置service名
globalConfig.setServiceName("%sService");
}
return globalConfig;
}
/**
* 返回項(xiàng)目路徑
* @param projectName 項(xiàng)目名
* @return 項(xiàng)目路徑
* @author Terry
*/
private String getOutputDir(String projectName) {
// String path = this.getClass().getClassLoader().getResource("").getPath();
// int index = path.indexOf(projectName);
return "E:/repository/git-repository/project/" + projectName + "/src/main/java/";
}
/**
* 策略配置
* @param tableNames 表名
* @return StrategyConfig
* @author Terry
*/
private StrategyConfig getStrategyConfig(String... tableNames) {
return new StrategyConfig()
// 全局大寫命名 ORACLE 注意
.setCapitalMode(true)
//從數(shù)據(jù)庫(kù)表到文件的命名策略
.setNaming(NamingStrategy.underline_to_camel)
//需要生成的的表名或辖,多個(gè)表名傳數(shù)組
.setInclude(tableNames)
//公共父類
//.setSuperControllerClass(superControllerClass)
//.setSuperEntityClass(superEntityClass)
// 寫于父類中的公共字段
//.setSuperEntityColumns("id")
//使用lombok
.setEntityLombokModel(true)
//rest風(fēng)格
.setRestControllerStyle(true);
}
/**
* 配置數(shù)據(jù)源
* @return 數(shù)據(jù)源配置 DataSourceConfig
* @author Terry
*/
private DataSourceConfig getDataSourceConfig() {
return new DataSourceConfig().setDbType(dbType)
.setUrl(dbUrl)
.setUsername(userName)
.setPassword(password)
.setDriverName(driver);
}
/**
* 根據(jù)表自動(dòng)生成
* @param packageName 包名
* @param tableNames 表名
* @author Terry
*/
@SuppressWarnings("unused")
private void generateByTables(String packageName, String... tableNames) {
generateByTables(true, packageName, tableNames);
}
}