Mybatis+velocity自動生成代碼
myBatis-Plus結合velocity模闆配置基礎資訊生成代碼
1.首先導入velocity的包
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
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="";
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;
}
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;
}
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;
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;
}
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;
}
8.包配置
public static PackageConfig PackageGenerate(){
PackageConfig pc = new PackageConfig()
.setParent("com")
.setModuleName(PACKAGE_NAME)
.setController("action")
.setEntity("entity")
.setMapper("mapper")
.setXml("mapper");
return pc;
}
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();
}
10.調用方法并配置基礎參數就可生成模闆啦
AutoGenerateUtil generatorServiceEntity=new AutoGenerateUtil();
generatorServiceEntity.generateByTablesWithInjectConfig();
*可以根據自己項目的需求自定義模版,也可以使用源碼中自帶的模闆生成最基礎的代碼
模闆配置中不傳參數時,預設使用源碼中的模闆。
*詳情參考 MyBatis-Plus 代碼生成器 (http://mp.baomidou.com/guide/generator.html)
*源碼位址 https://github.com/baomidou/mybatis-plus/tree/3.0/mybatis-plus-generator/src/main
---------------------
原文:https://blog.csdn.net/u011273768/article/details/83058291