前言
初次接触mybatis plus是17年末,当时的版本是2.0+,在那之前公司使用的mybatis框架是tk.mybatis,也是衍生于mybatis的一款扩展框架。当时拿mybatis plus与tk相比虽然觉得plus功能已经足够强大了(如逻辑删除、sql打印插件、分页插件、雪花算法生成id等),但plus到了3.0之后新增的函数式编程才让我觉得开发者的体验质变版的提升,不会再出现字段输错的问题(注意换行,观感更强),具体可到官网网站查看,国人开源,文档也很详细完善,就不在此介绍了。
tk.mybatis与mybatis的代码生成器相同,都是通过maven插件+配置文件或IDE插件+配置文件生成,而mybatis-plus则需新建一个生成项目去生成,不同数据库的生成都要重新配置,对于我而言这2种都十分麻烦,于是开始从对mybatis-plus的生成源码进行更改后转成了将生成源码更改并集成为maven插件。
生成流程
虽然市面上也有不少生成器框架,连前端vue页面都生成了的都有,但习惯了前后端分离的我只需要后端页面(没有艺术感的我对样式敬而远之),且还想生成器可以根据自己的扩展模板(如常量类、Manager层、VO或DTO)去生成文件。后文介绍的框架并不一定适用于大家的需求,但大家可以了解下生成的流程,因为万变不离其宗,思想总有相同[doge]:
1.设定各层(Entity、Constant、DAO、Service等)模板文件
2.JDBC连接数据库获取相关表信息并转成相应类(如Table存储表信息,TableField存储字段信息)
3.遍历数据库表信息类对模板文件进行填充
模板文件:文件中通过特定范式表示动态内容,通过外部设定范式值进行范式替换填充以获得目标文件样式
干货时间
先说下一开始造这货的主要目的(也是这货的功能):
- 由于项目Root模块下的各子模块可能负责的业务不同,即连接的数据库不同,所以每个模块都想配置一个生成器,配置也必须简单
- 生成的位置必须易于提取
- 由于负责其他业务的同事可能需要了解我负责业务的一些信息或常量,但他不一定了解我当前负责业务的常量划分(如商品库存的常量是放到商品的常量类中还是商品库存的常量类中,如果是放到商品常量类中会不会由于不了解误用了商品类的),于是决定通过傻瓜式生成常量类,只要数据库表字段含特定的常量范式【如:删除(YES:1-已删除,NO:0-未删除)】,就可以生成字段所属表的常量类
- 文件模板必须可以自定义与扩展(如其它层Manager、DTO等模板文件)
作为一个生成工具没必要考虑模板框架的性能问题,且只需对模板语法略知一二就可配置模板文件,所以生成器也就从mybatis plus原支持的模板Velocity与Freemarker中随便选了个Freemarker。
快速开始
- 添加maven插件依赖

- 执行结果

生成的文件会放到当前项目模块的targer/generated-sources目录下,上图中删除字段常量范式为:删除(YES:1-已删除,NO:0-未删除),生成的常量结果如上图,如果字段是字符串范式为:状态(ENABLE-启用,DISABLE-禁用),则将无视commentPattern配置生成上图效果。当时达到目的效果,唔.....

更多配置项
扩展配置项挺多的,如:
- 覆盖插件原有的各层ftl模板文件(templates子标签xxxPattern、xxxPath)
- 自定义扩展模板文件templates子标签cusoms)
- 不生成特定层文件
- ......
更多配置项可到源码地址查看文档,这里就不多BB啦。造出来的轮子虽然不适用于所有人,但制造过程的思想希望还是能对大家有点用的。
附:看过我之前swagger2-spring-boot-starer文章的条友们应该都知道github上框架的源码地址是https://github.com/{groupId最后位}/{artifactId}这个小技巧啦,在该文章中 groupId最后位 = wilson-he,artifactId=generator-maven-plugin,gitee上也是同理,只是地址前缀改为https://gitee.com/