Mybatis-Generator 可自动生成Model、Dao、Mapper代码,但其自带生成的代码存在以下问题:
- 生成的注释不是我们想要的,我们期望的是根据数据库表、字段生成不同的注释;
- 分页代码生成缺失,每个公司的分页方式不同,尤其是老久项目或已发布API,不能随意变动,那么如何自适应分页代码生成;
- Mapper.xml没有group by相关代码生成;
- 重复生成代码时,Mapper.xml并不是覆盖原代码,而是对内容进行了追加;
- 序列化,
mybatis-generator
内置了SerializablePlugin
,但仅对Model,并没有对 Example序列化,在一些开发中是不够的; - 对Service Layer代码没有生成。
实际上,mybatis-generator
提供了PluginAdapter
供我们来继承,进行个性化的一些扩展(Plugin的相关内容是阅读本文的前置条件)如果不熟悉的同学,请自行补充,本文不对其进行相关介绍)。同时,本文不可能涵盖所有业务所需的扩展点,但是基本样板已有,可参考本文代码继续进行扩展。
一、注释的自定义生成
根据数据库表或字段的COMMENT
生成注释。@Date 生成的时间可根据需要自己定义格式。
1 | 复制代码package run.override; |
Model 类注释(表的描述): MySQL。
1)EntityCommentPlugin
1 | 复制代码package run.override.model; |
二、分页和分组代码生成
这里,我对Dao Model进行了通用方法的抽取,建立通用基类。同时,对其进行了一些扩展,增加分页和分组。
先对基类进行介绍。
1)BaseMapper
1 | 复制代码package cn.xxx.core.base.dao; |
2)BaseExample
1 | 复制代码package cn.xxx.core.base.model; |
3)PageInfo
1 | 复制代码package cn.xxx.core.base.model; |
4)PaginationPlugin
分页扩展。并且Example
继承BaseExample
。
1 | 复制代码package run.override.pagination; |
5)FullyQualifiedJavaTypeProxyFactory
1 | 复制代码package run.override.proxyFactory; |
三、Dao 生成代码简化
1)ClientDaoPlugin
1 | 复制代码package run.override.dao; |
四、修正
重复生成时Mapper.xml不是覆盖原代码,而是对内容进行了追加。
1)SqlMapIsMergeablePlugin
1 | 复制代码package run.override.mapper; |
五、序列化自定义扩展
增加Example
的序列化,并增加@SuppressWarnings("serial")
注解。
1)SerializablePlugin
1 | 复制代码package run.override; |
六、服务层代码自定义生成
重写Context
,ConfigurationParser
,MyBatisGeneratorConfigurationParser
,增加服务层生成逻辑。
先对Service基类进行介绍。
1)BaseService
1 | 复制代码package cn.xxx.core.base.service; |
2)BaseServiceImpl
1 | 复制代码package cn.xxx.core.base.service.impl; |
3)ServiceLayerPlugin
1 | 复制代码package run.override.service; |
4)ContextOverride
1 | 复制代码package run.override.service; |
5)MyBatisGeneratorConfigurationParserOverride
1 | 复制代码package run.override.service; |
6)ServiceGeneratorConfiguration
1 | 复制代码package run.override.service; |
7)ConfigurationParserOverride
1 | 复制代码package run.override.service; |
七、PluginChain
通过继承,把以上扩展Plugin串起来(SerializablePlugin
一些项目中可能不需要,故不加入Chain。同时,其他也可以根据需要对Chain进行更改)。
1 | 复制代码package run.override; |
八、generatorConfig.xml
增加javaServiceGenerator
相关配置标签。本文使用内部DTD做示例,亦可通过外部DTD或xsd来实现。
1)generatorConfig.xml
1 | 复制代码<?xml version="1.0" encoding="UTF-8"?> |
九、main启动
1 | 复制代码 package run.generator; |
至此,对mybatis-generator的扩展生成代码完成。
来源:宜信技术学院
作者:马伟伟
本文转载自: 掘金