美文网首页
利用seed项目自动生成SpringBoot骨架代码

利用seed项目自动生成SpringBoot骨架代码

作者: 扁圆柱体 | 来源:发表于2020-07-06 23:22 被阅读0次

    项目背景

    项目地址: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注解。

    RenameMapperFilePluginRenameMapperClassPlugin是两个自定义插件,主要用于将EntityMapper转换为Mapper。这是因为在生成Entity时,给到TableConfigurationmodelName增加了一个Entity后缀。所以在Mapper,包括后面的Service和Controller中要再去掉这个后缀。这里注意要替换的字符串,是一个正则表达式,所以应该以$结尾,表示字符串在类名/文件名的最后。

    Service和Controller

    Service和Controller相对比较简单,只要使用FreeMaker的ftl后缀的模板,并将其中需要替换的变量,用一个Map作为参数调用Template.process方法即可。模板也可以进行随意修改,完全符合FreeMaker的语法。

    相关文章

      网友评论

          本文标题:利用seed项目自动生成SpringBoot骨架代码

          本文链接:https://www.haomeiwen.com/subject/ndhnqktx.html