當前位置:
首頁 > 知識 > Mybatis+velocity自動生成代碼

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

Mybatis+velocity自動生成代碼

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

ajax傳遞參數給springmvc總結「轉」
Docker搭建L2TP-VPN伺服器

TAG:程序員小新人學習 |