Mybatis+velocity自动生成代码
Mybatis+velocity自动生成代码
终于换框架了,开心鸭,欢呼鸭。。。。
myBatis-Plus结合velocity模板配置基础信息生成代码
1.首先导入velocity的包
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
1
2
3
4
5
2.初始化参数
//项目存储位置
public static String PROJECT_GENERATE_DISK = "";
//包名
public static String PACKAGE_NAME= "";
//数据库地址
public static String DB_URL = "";
//数据库实例名
public static String DRIVER_CLASS_NAME = "";
//数据库类型
public static String DB_TYPE = "";
//数据库用户
public static String USER = "";
//数据库密码
public static String PASSWORD = "";
//数据库schema
public static String SCHEMA = "";
//要查询的表名
public static String TABLE_NAMES = "";
//创建人
public static String AUTHOR = "";
//是否强制带上注解
public static boolean ENABLE_TABLE_FIELD_ANNOTATION = false;
//生成的注解带上IdType类型
public static IdType TABLE_IDTYPE = null;
//是否去掉生成实体的属性名前缀
public static String[] FIELD_PREFIX = null;
//生成的Service 接口类名是否以I开头 默认是以I开头 user表 -> IUserService, UserServiceImpl
public static boolean SERVICE_CLASS_NAME_START_WITHI = false;
//jsp生成地址
public static String JSP_URL="";
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
3.全局配置
private static GlobalConfig GlobalGenerate(){
GlobalConfig config = new GlobalConfig();
config.setActiveRecord(false)// 不需要ActiveRecord特性的请改为false
.setIdType(TABLE_IDTYPE)
.setEnableCache(false);// XML 二级缓存
.setAuthor(AUTHOR)
.setBaseResultMap(true)// XML ResultMap
.setBaseColumnList(false);// XML columList
.setOutputDir(PROJECT_GENERATE_DISK+"\java")
.setFileOverride(true)
.setControllerName("%sAction")//自定义文件命名,注意 %s 会自动填充表实体属性!
;
if (!SERVICE_CLASS_NAME_START_WITHI) {
config.setServiceName("%sService");
}
return config;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
4.数据源配置
private static DataSourceConfig DaoSourceGenerate(){
DataSourceConfig dataSourceConfig = new DataSourceConfig();
DbType type=null;
if("oracle".equals(DB_TYPE)){
type=DbType.ORACLE;
}else if("sql_server".equals(DB_TYPE)){
type=DbType.SQL_SERVER;
}else if("mysql".equals(DB_TYPE)){
type=DbType.MYSQL;
}else if("postgre_sql".equals(DB_TYPE)){
type=DbType.POSTGRE_SQL;
}
dataSourceConfig.setDbType(type)//数据库类型
.setUrl(DB_URL)//数据库地址
.setUsername(AutoGenerateUtil.DB_TYPE)//数据库用户名
.setPassword(AutoGenerateUtil.PASSWORD)//数据库密码
.setDriverName(AutoGenerateUtil.DRIVER_CLASS_NAME)//实例名
.setSchemaname(AutoGenerateUtil.SCHEMA);
return dataSourceConfig;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
5.策略配置
private static StrategyConfig StrategyGenerate(){
StrategyConfig strategyConfig = new StrategyConfig();
strategyConfig
.setVersionFieldName("version")
.setCapitalMode(true)// 全局大写命名 ORACLE 注意
.setEntityLombokModel(false)
.setDbColumnUnderline(true)
.setNaming(NamingStrategy.underline_to_camel)// 表名生成策略
.entityTableFieldAnnotationEnable(ENABLE_TABLE_FIELD_ANNOTATION)
.fieldPrefix(FIELD_PREFIX)//test_id -> id, test_type -> type
.setInclude(TABLE_NAMES);//修改替换成你需要的表名,多个表名传数组
.setExclude(new String[]{"test"}); // 排除生成的表
.setTablePrefix(new String[] { "tlog_", "tsys_" });// 此处可以修改为您的表前缀
.setSuperEntityClass("com.lin.demo.TestEntity");// 自定义实体父类
.setSuperEntityColumns(new String[] { "test_id","age" });// 自定义实体,公共字段
.setSuperMapperClass("com.lin.demo.TestMapper");// 自定义 mapper 父类
.setSuperServiceClass("com.lin.demo.TestService");// 自定义 service 父类
.setSuperServiceImplClass("com.lin.demo.TestServiceImpl");// 自定义 service 实现类父类
.setSuperControllerClass("com.lin.demo.TestController");// 自定义 controller 父类
.setEntityColumnConstant(true);// 【实体】是否生成字段常量(默认 false)public static final String ID = "test_id";
.setEntityBuilderModel(true);// 【实体】是否为构建者模型(默认 false)public User setName(String name) {this.name = name; return this;}
return strategyConfig;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
6.自定义模板配置
private static TemplateConfig TemplateGenerate(){
TemplateConfig templateConfig = new TemplateConfig()
.setXml("/template/mapper2.xml")//注意:不要带上.vm
.setController("/template/action.java")
.setMapper("/template/mapper.java")
.setXml("/template/mapper.xml")
.setService("/template/service.java")
.setServiceImpl("/template/serviceImpl.java")
;
return templateConfig;
}
1
2
3
4
5
6
7
8
9
10
11
7.自定义文件及key
private static InjectionConfig FileGenerate(){
InjectionConfig injectionConfig = new InjectionConfig() {
@Override
public void initMap() {//自定义参数
Map<String, Object> map = new HashMap<>();
map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp");
this.setMap(map);
}
};
// 自定义 xxList.jsp 生成
List<FileOutConfig> focList = new ArrayList<FileOutConfig>();
//创建jsp目录
Files files = new Files(JSP_URL);
files.createlist();
//生成列表页面
focList.add(new FileOutConfig("/template/list.jsp.vm") {
@Override
public String outputFile(TableInfo tableInfo) {
return JSP_URL+"\list.jsp";
}
});
injectionConfig.setFileOutConfigList(focList);
return injectionConfig;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
8.包配置
public static PackageConfig PackageGenerate(){
PackageConfig pc = new PackageConfig()
.setParent("com")
.setModuleName(PACKAGE_NAME)
.setController("action")
.setEntity("entity")
.setMapper("mapper")
.setXml("mapper");
return pc;
}
1
2
3
4
5
6
7
8
9
10
9.生成代码
public void generateByTablesWithInjectConfig() {
//全局配置
GlobalConfig config =AutoGenerateUtil.GlobalGenerate();
//配置数据源
DataSourceConfig dataSourceConfig=AutoGenerateUtil.DaoSourceGenerate();
//配置策略
StrategyConfig strategyConfig = AutoGenerateUtil.StrategyGenerate();
//配置模板
TemplateConfig templateConfig = AutoGenerateUtil.TemplateGenerate();
//生成jsp文件
InjectionConfig injectionConfig = AutoGenerateUtil.FileGenerate();
//配置包
PackageConfig packageConfig=AutoGenerateUtil.PackageGenerate();
//生成代码
new AutoGenerator()
.setGlobalConfig(config)
.setTemplate(templateConfig)//自定义模板路径
.setCfg(injectionConfig)
.setDataSource(dataSourceConfig)
.setStrategy(strategyConfig)
.setPackageInfo(packageConfig)
.execute();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
10.调用方法并配置基础参数就可生成模板啦
AutoGenerateUtil generatorServiceEntity=new AutoGenerateUtil();
generatorServiceEntity.generateByTablesWithInjectConfig();
1
2
*可以根据自己项目的需求自定义模版,也可以使用源码中自带的模板生成最基础的代码
模板配置中不传参数时,默认使用源码中的模板。
*详情参考 MyBatis-Plus 代码生成器 (http://mp.baomidou.com/guide/generator.html)
*源码地址 https://github.com/baomidou/mybatis-plus/tree/3.0/mybatis-plus-generator/src/main