项目背景
项目地址:https://github.com/lihengming/spring-boot-api-project-seed
该项目通过MyBatis Generator生成项目骨架代码,包括Entity,Mapper(Java & XML),Service/ServiceImpl,Controller几个元素。
配置好数据库连接,只要给定数据库中的表名,就可以生成以这个表基础的以上代码元素。需要注意的是,只有Entity和Mapper由MyBatis Generator生成,而Service和Controller由FreeMaker模板语言生成。
Entity和Mapper
利用MyBatis Generator可以很方便的生成Entity和Mapper。框架提供了两种方式生成代码。一种是xml方式的配置,需要通过在maven中安装plugin来run一个goal实现代码生成;另一种方式是使用代码,基本和xml配置相同。本项目即使用代码方式来生成新代码。
基本类
JdbcConnectionConfiguration
类主要来配置Mysql的连接信息。
JavaModelGeneratorConfiguration
类主要来配置Entity的属性,包括文件目录和包路径。还可以配置一个rootClass
,用于扩展一个基础的类,例如AbstractEntity
。
SqlMapGeneratorConfiguration
类主要来配置Mapper类的属性,而对应的JavaClientGeneratorConfiguration
用来配置xml文件的属性。
TableConfiguration
类配置表本身的属性,例如表名。这里可以使用ColumnRenamingRule
类对字段进行重命名(缺省是下划线转驼峰);还可以使用ColumnOverride
类对字段进行重定义类型,例如将包装类型转换成基本类型,如果字段是not null
的。
以上基本类定义好后,装载到Context
中。最后使用MyBatisGenerator
进行实际的生成工作。
Plugin插件
除了以上基本类,为了让输出更加符合我们的规范,可以使用Plugin插件进行重定义代码生成行为。
所有的插件都是一个继承自PluginAdapter
的类,而这个类要放到PluginConfiguration
类中,并通过该类的addProperty
方法加入必要的参数。所有生成的PluginConfiguration
类都需要放到Context
中,但并没有顺序的区别。
主要有以下几种:
LombokPlugin
类是一个自定义插件,在主类生成中,加入需要的import语句和注解。这里就增加了@Getter
, @Setter
, @ToString
。由于Lombok的@Data
注解内容太多,所以用以上三个注解替换。同时这个类也告诉生成器不需要生成getter和setter方法。
MapperPlugin
类是tk提供的一个插件,用于给Entity增加JPA注解和Mapper增加基础继承类。
MapperAnnotationPlugin
是MyBatis的官方插件(1.3.6以后),用于在Mapper类上增加@Mapper
注解。
RenameMapperFilePlugin
和RenameMapperClassPlugin
是两个自定义插件,主要用于将EntityMapper
转换为Mapper
。这是因为在生成Entity时,给到TableConfiguration
的modelName
增加了一个Entity
后缀。所以在Mapper,包括后面的Service和Controller中要再去掉这个后缀。这里注意要替换的字符串,是一个正则表达式,所以应该以$结尾,表示字符串在类名/文件名的最后。
Service和Controller
Service和Controller相对比较简单,只要使用FreeMaker的ftl后缀的模板,并将其中需要替换的变量,用一个Map作为参数调用Template.process
方法即可。模板也可以进行随意修改,完全符合FreeMaker的语法。
网友评论