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自动生成代码

相关推荐