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
※ajax傳遞參數給springmvc總結「轉」
※Docker搭建L2TP-VPN伺服器
TAG:程序員小新人學習 |