背景
研发工作中,通常需要根据需求来进行数据库表设计,而在表设计之后,进行代码实现时,最繁琐枯躁的就是实体类、初始dao,service,controller层的的代码编写了。这些工作没什么技术含量,不过是根据数据库中的属性来建立java文件而己,但是却很费工夫。有经验的程序猿们都知道运用各种工具来自动生成这类代码,今天我就介绍一款我常用的代码生成工具类。
实践
1、引入maven依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.2</version>
</dependency>
<!--swagger集成 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>3.0.0</version>
</dependency>
<!--数据库驱动 -->
<dependency>
<groupId>com.jdbc.dm</groupId>
<artifactId>DmJdbcDriver18</artifactId>
<version>1.0</version>
</dependency>
2、工具类
public class CodeGenerationUtils {
/**
* 需要生成的表名
*/
private static final String[] TABLE_NAMES = new String[]{"sys_user"};
/**
* 文件路径
*/
public static final String PROJECT_PATH = "E:\\study\\";
/**
* 项目名
*/
public static final String PROJECT_NAME = "code-generation";
/**
* 数据源配置
*/
public static final String DATA_SOURCE_URL = "jdbc:dm://192.168.5.97:5238/LEIXI";
public static final String DATA_SOURCE_USERNAME = "LEIXI";
public static final String DATA_SOURCE_PASSWORD = "leixi123";
public static final String DATA_SOURCE_DRIVERNAME = "dm.jdbc.driver.DmDriver";
/**
* @MethodName: main
* @Description: 代码生成器
**/
public static void main(String[] args) {
// 代码生成器
AutoGenerator autoGenerator = new AutoGenerator();
autoGenerator.setDataSource(getDataSourceConfigInfo());
autoGenerator.setGlobalConfig(getGlobalConfigInfo());
autoGenerator.setPackageInfo(getPackageConfigInfo());
autoGenerator.setStrategy(getStrategyConfigInfo(TABLE_NAMES));
autoGenerator.execute();
}
/**
* @MethodName: getDataSourceConfigInfo
* @Description: 数据源配置
**/
public static DataSourceConfig getDataSourceConfigInfo() {
DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig.setUrl(DATA_SOURCE_URL);
dataSourceConfig.setUsername(DATA_SOURCE_USERNAME);
dataSourceConfig.setPassword(DATA_SOURCE_PASSWORD);
dataSourceConfig.setDbType(DbType.DM);
dataSourceConfig.setDriverName(DATA_SOURCE_DRIVERNAME);
return dataSourceConfig;
}
/**
* @MethodName: getGlobalConfigInfo
* @Description: 全局配置
**/
public static GlobalConfig getGlobalConfigInfo() {
// 全局配置
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setOutputDir(PROJECT_PATH + PROJECT_NAME + "/src/main/java/");
globalConfig.setAuthor("leixi");
globalConfig.setOpen(false);
globalConfig.setSwagger2(true);
globalConfig.setBaseColumnList(true);
globalConfig.setBaseResultMap(true);
globalConfig.setActiveRecord(false);
globalConfig.setFileOverride(true);
globalConfig.setServiceName("%sService");
return globalConfig;
}
/**
* @MethodName: getPackageConfigInfo
* @Description: 包配置
**/
public static PackageConfig getPackageConfigInfo() {
PackageConfig packageConfig = new PackageConfig();
//包名
packageConfig.setParent("com.leixi.common");
// 模块名
packageConfig.setModuleName(null);
// 实体类的包名
packageConfig.setEntity("entity");
// dao层的包名
packageConfig.setMapper("dao");
return packageConfig;
}
/**
* @MethodName: getStrategyConfigInfo
* @Description: 策略配置
**/
public static StrategyConfig getStrategyConfigInfo(String... tableNames) {
StrategyConfig strategyConfigInfo = new StrategyConfig();
strategyConfigInfo.setCapitalMode(true);
strategyConfigInfo.setNaming(NamingStrategy.underline_to_camel);
//下划线转驼峰命名
strategyConfigInfo.setColumnNaming(NamingStrategy.no_change);
//需要生成的的表名,多个表名传数组
strategyConfigInfo.setInclude(tableNames);
//设置逻辑删除字段
strategyConfigInfo.setLogicDeleteFieldName("isDelete");
//使用lombok
strategyConfigInfo.setEntityLombokModel(true);
//设置表格前缀
strategyConfigInfo.setTablePrefix("");
//rest风格
strategyConfigInfo.setRestControllerStyle(true);
return strategyConfigInfo;
}
}
3、测试
运行前,我的项目是这样的:
点击工具类,运行main()方法后,我的项目是这样的:
这个工具是我从同事那里要来的,它对于研发工作效率的提升是毋庸置疑。我当时比较好奇的是,同事是怎么得到这种工具的?打死我也不相信这是他自研的。后来在我的严刑拷打下,他才透露说是自己从网上抄来了,也不知道抄的哪位大佬。不管是谁,雷袭在这里先行谢过了。