mybatis-plus代码构造器工具类
/**
* FileName: MybatisPlusGenerator.java
* @author: zhu
* @version V1.0
* Createdate: 2018年12月26日 上午9:47:51
* Copyright: Copyright(C) 2018
* Company CY.
* All rights Reserved, Designed By zhu
* Modification History:
* Date Author Version Discription
* ---------------------------------------------------------------------------
* 2018年12月26日 zhu 1.0 1.0
* Why & What is modified:
*/
package com.zhu.test;
import org.junit.Test;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
/**
* @ClassName: MybatisPlusGenerator
* @author: zhu
* @date: 2018年12月26日 上午9:47:51
*/
public class MybatisPlusGenerator {
/**
* 项目名
*/
private static final String PROJECT_NAME = "test";
/**
* 包名
*/
private static final String PACKAGE_NAME = "com.zhu.test";
/**
* 输出文件的路径
*/
private static final String OUT_PATH = "D:/eclipse/test/src/main/java/";
/**
* 代码生成者
*/
private static final String AUTHOR = "zhu";
/**
* JDBC相关配置
*/
private static final String DRIVER = "com.mysql.jdbc.Driver";
/**
* 连接地址
*/
private static final String URL = "jdbc:mysql://localhost:3306/test?useSSL=true";
/**
* 账号
*/
private static final String USER_NAME = "root";
/**
* 密码
*/
private static final String PASSWORD = "123456";
/**
* 要生成的表名
*/
private static final String[] TABLE_NAMES = new String[]{"zhu"};
@Test
public void generateCode() {
//user -> UserService, 设置成true: user -> IUserService
boolean serviceNameStartWithI = false;
//指定生成的表名
generateByTables(serviceNameStartWithI, PACKAGE_NAME, TABLE_NAMES);
}
/**
* 根据表自动生成
*
* @param serviceNameStartWithI 默认为false
* @param packageName 包名
* @param tableNames 表名
* @author Terry
*/
private void generateByTables(boolean serviceNameStartWithI, String packageName, String... tableNames) {
//配置数据源
DataSourceConfig dataSourceConfig = getDataSourceConfig();
// 策略配置
StrategyConfig strategyConfig = getStrategyConfig(tableNames);
//全局变量配置
GlobalConfig globalConfig = getGlobalConfig(serviceNameStartWithI);
//包名配置
PackageConfig packageConfig = getPackageConfig(packageName);
//自动生成
atuoGenerator(dataSourceConfig, strategyConfig, globalConfig, packageConfig);
}
/**
* 集成
*
* @param dataSourceConfig 配置数据源
* @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)
.execute();
}
/**
* 设置包名
*
* @param packageName 父路径包名
* @return PackageConfig 包名配置
* @author Terry
*/
private PackageConfig getPackageConfig(String packageName) {
return new PackageConfig()
.setParent(packageName)
.setXml("mapper")
.setMapper("mapper")
.setController("controller")
.setEntity("model");
}
/**
* 全局配置
*
* @param serviceNameStartWithI false
* @return GlobalConfig
* @author Terry
*/
private GlobalConfig getGlobalConfig(boolean serviceNameStartWithI) {
GlobalConfig globalConfig = new GlobalConfig();
globalConfig
// XML columList
.setBaseColumnList(true)
// XML ResultMap
.setBaseResultMap(true)
// 开启 activeRecord 模式
.setActiveRecord(false)
.setAuthor(AUTHOR)
//设置输出路径 如此处为项目名称则调用getOutputDir(projectName)方法.否则直接用OUT_PATH
.setOutputDir(OUT_PATH)
// 是否覆盖文件
.setFileOverride(true)
// XML 二级缓存
.setEnableCache(false);
if (!serviceNameStartWithI) {
//设置service名
globalConfig.setServiceName("%sService");
}
return globalConfig;
}
/**
* 返回项目路径
*
* @param projectName 项目名
* @return 项目路径
* @author Terry
*/
private String getOutputDir(String projectName) {
String path = this.getClass().getClassLoader().getResource("").getPath();
int index = path.indexOf(projectName);
return path.substring(1, index) + projectName + "/src/main/java/";
//return OUT_PATH;
}
/**
* 策略配置
*
* @param tableNames 表名
* @return StrategyConfig
* @author Terry
*/
private StrategyConfig getStrategyConfig(String... tableNames) {
return new StrategyConfig()
// 全局大写命名 ORACLE 注意
.setCapitalMode(true)
.setEntityLombokModel(false)/*
* // 表名、字段名、是否使用下划线命名(默认 false) .setDbColumnUnderline(false)
*/
//从数据库表到文件的命名策略
.setNaming(NamingStrategy.underline_to_camel)
//需要生成的的表名,多个表名传数组
.setInclude(tableNames)
// .setTablePrefix(new String[]{"demo_"})// 此处可以修改为您的表前缀
;
}
/**
* 配置数据源
*
* @return 数据源配置 DataSourceConfig
* @author Terry
*/
private DataSourceConfig getDataSourceConfig() {
return new DataSourceConfig()
// 数据库类型
.setDbType(DbType.MYSQL)
.setUrl(URL)
.setUsername(USER_NAME)
.setPassword(PASSWORD)
.setDriverName(DRIVER);
}
/**
* 根据表自动生成
*
* @param packageName 包名
* @param tableNames 表名
* @author Terry
*/
@SuppressWarnings("unused")
private void generateByTables(String packageName, String... tableNames) {
generateByTables(true, packageName, tableNames);
}
}
网友评论