小书MybatisPlus第7篇-代码生成器的原理精讲及使用方法

网友投稿 880 2022-05-29

一、代码生成器的基础实现原理

相信大部分的开发者都使用过或者听说过“模板引擎”,它可以帮我们实现视图与数据的分离,快速开发视图页面,并将模板整合结果用于在浏览器显示。其核心实现原理就是:HTML模板页面 + 页面数据 = 输出结果。页面视图输出的过程就是通过模板引擎实现的。

代码生成器的实现原理与模板引擎实现页面渲染的逻辑几乎是一致的,除了下面的几个区别:

所谓模板:就是某语言的代码 + 模板引擎语法的占位符,该占位符用来数据天换。所以代码生成器的模板文件不再专指HTML页面模板文件,可以是任何类型的代码文件。

模板引擎的输出结果在项目中是输出给浏览器进行页面渲染的,但是对于代码生成器而言,模板引擎的输出结果是保存到磁盘文件。

二、如何编写模板文件

要编写模板文件,首先我们要知道正常的代码待如何书写。比如下面的POJO代码:

上面的POJO代码写成Freemarker模板文件,就是下面的样子:

package ${package.Entity}; <#list table.importPackages as pkg> import ${pkg}; <#if entityLombokModel> import lombok.Data; import lombok.EqualsAndHashCode; /** *

* ${table.comment!} *

* * @author ${author} * @since ${date} */ <#if entityLombokModel> @Data <#if superEntityClass??> @EqualsAndHashCode(callSuper = true) <#else> @EqualsAndHashCode(callSuper = false) public class ${entity} extends Model<${entity}> { <#list table.fields as field> private ${field.propertyType} ${field.propertyName};

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

31

32

三、数据从哪里来?

有了模板文件,我们想通过模板引擎生成代码,下面的一个问题就是数据从哪里来?有了数据我们才能生成代码

从配置中来,比如:package路径等一些静态化不经常变化的信息,一个项目生成的代码存放的包路径通常不会经常变化。

从数据库中来,比如:实体类名称、实体类字段名称、实体类字段类型等信息。类似于逆向工程,通过数据库表名、字段名、字段类型等信息生成实体信息。

3.1.以MySQL的INFORMATION_SCHEMA信息获取为例

我们的代码自动生成是针对数据库操作,所以首先要了解数据库表的结构

SELECT column_name,data_type,is_nullable,character_maximum_length,column_comment FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name='kpi_task' AND table_schema='home' ORDER BY ordinal_position

1

2

3

4

5

如上图SQL查询的是home库,kpi_task表的信息,如下:

column_name作为表的字段可以生成实体类的成员变量参数名称(通常是驼峰标识规则)

data_type,is_nullable,character_maximum_length可用于生成校验规则。

注释可以用于生成column_comment

四、Mybatis Plus代码生成器的使用

如果上面的代码生成器实现原理你都看懂了,下面的这些配置你也就不难理解了。

4.1.添加依赖

添加 代码生成器 依赖

com.baomidou mybatis-plus-generator 3.3.2

1

2

3

4

5

添加 模板引擎 依赖,MyBatis-Plus 支持 Velocity(默认)、Freemarker、Beetl,用户可以选择自己熟悉的模板引擎。

Velocity(默认):

org.apache.velocity velocity-engine-core 2.2

1

2

3

4

小书MybatisPlus第7篇-代码生成器的原理精讲及使用方法

5

Freemarker:

org.freemarker freemarker 2.3.30

1

2

3

4

5

Beetl:

com.ibeetl beetl 3.1.8.RELEASE

1

2

3

4

5

注意!如果您选择了非默认引擎,需要在 AutoGenerator 中 设置模板引擎。

AutoGenerator generator = new AutoGenerator(); // set freemarker engine generator.setTemplateEngine(new FreemarkerTemplateEngine()); // set beetl engine generator.setTemplateEngine(new BeetlTemplateEngine()); // set custom engine (reference class is your custom engine class) generator.setTemplateEngine(new CustomTemplateEngine()); // other config ...

1

2

3

4

5

6

7

8

9

10

11

12

13

4.2.代码生成配置

AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。

执行下面的这个测试用例,Mybatis Plus就可以帮助我们实现以上各层的代码生成到对应的package路径下面

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

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

Spring 数据库

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:汇编语言从键盘输入一个字符串(串长不大于80)以十进制输出字符串中非字母字符的个数(不是a to z或 A to Z)
下一篇:推荐算法岗位要求(非内推非广告)
相关文章