mybatis generator自定义逆向工程防覆盖sql代码

Mybatis generator 自定义逆向工程防覆盖sql

在项目中常常有数据库的变更,我们会常用到mybats generator逆向工程来为我们更新项目中的sql语句及entity实体,此时会带来一个问题,我们自己写的sql会被覆盖,为了解决这个问题我们常常会自己写个mapper扩展文件去写我们自己写的sql。但是。。。自动生成的sql模板语句难以满足我们需求,并且工作量也大。本文将讲解mybatis generator自定义逆向工程统统解决这些问题。

首先我们观察我们在项目中配置的generator.xml文件的格式:
mybatis generator自定义逆向工程防覆盖sql代码_第1张图片
mybatis generator自定义逆向工程防覆盖sql代码_第2张图片
targetRuntime表示context容器将进入cn.common.mbg.introspect.MyIntrospectedTableImpl扩展类运行。
plugin标签type属性表示讲加载DaoExtPlugin插件进行扩展。

context容器:
mybatis generator自定义逆向工程防覆盖sql代码_第3张图片
接下来就开始自定义逆向工程步骤了:

方法一

1、写个MyIntrospectedTableImpl类,继承IntrospectedTableMyBatis3Impl,重写getMyBatis3SqlMapNamespace方法改变生成后的mapper.xml的命名空间

mybatis generator自定义逆向工程防覆盖sql代码_第4张图片
2、自定义插件DaoExtPlugin继承PluginAdapter,重写validate方法进行数据校验
mybatis generator自定义逆向工程防覆盖sql代码_第5张图片
3、重写contextGenerateAdditionalJavaFiles方法,新增dao层java扩展文件
mybatis generator自定义逆向工程防覆盖sql代码_第6张图片
4、重写contextGenerateAdditionalXmlFiles方法,新增mapper.xml扩展文件。
GeneratedXmlFile构造xml文件对象的isMergeable参数是表示执行generator逆向工程前后的文件是否合并,如果为false则我们写的扩展sql不会被覆盖
mybatis generator自定义逆向工程防覆盖sql代码_第7张图片现在可以看看效果了
mybatis generator自定义逆向工程防覆盖sql代码_第8张图片
mybatis generator自定义逆向工程防覆盖sql代码_第9张图片mybatis generator自定义逆向工程防覆盖sql代码_第10张图片
mybatis generator自定义逆向工程防覆盖sql代码_第11张图片
mybatis generator自定义逆向工程防覆盖sql代码_第12张图片
5、想要的效果有了,但是感觉还是不够完美,提供的查询sql不够用,那么就自定义条查询sql
mybatis generator自定义逆向工程防覆盖sql代码_第13张图片
mybatis generator自定义逆向工程防覆盖sql代码_第14张图片
6、有sql那还得有对应的方法
mybatis generator自定义逆向工程防覆盖sql代码_第15张图片
写完执行看结果
mybatis generator自定义逆向工程防覆盖sql代码_第16张图片
mybatis generator自定义逆向工程防覆盖sql代码_第17张图片
至此,成功实现了预期目标
mybatis generator自定义逆向工程防覆盖sql代码_第18张图片
在上个方法中会多生成一个扩展文件,如果想要只用一个文件且不覆盖,有办法吗?

方法二

1、在MyIntrospectedTableImpl类中重写getGeneratedJavaFiles方法,我们看该源码的方法
mybatis generator自定义逆向工程防覆盖sql代码_第19张图片2、重写getGeneratedJavaFiles自定义sql方法,根据文件路径判断文件是否生成,如已存在则不重新生成,避免被覆盖
mybatis generator自定义逆向工程防覆盖sql代码_第20张图片
3、重写getGeneratedXmlFiles方法,在mapper.xml文件中新增sql语句。isMergeable置为true,否则自己业务写的sql会被覆盖
mybatis generator自定义逆向工程防覆盖sql代码_第21张图片
mybatis generator自定义逆向工程防覆盖sql代码_第22张图片
生成之后的模型
mybatis generator自定义逆向工程防覆盖sql代码_第23张图片
mybatis generator自定义逆向工程防覆盖sql代码_第24张图片
4、新增业务方法,并在数据库追加字段

mybatis generator自定义逆向工程防覆盖sql代码_第25张图片
重新生成

mybatis generator自定义逆向工程防覆盖sql代码_第26张图片

可以发现自己写的sql重新生成后没有被覆盖,要达到这种效果需要做到两点

1、isMergeable设置为true,2、mybatis自动生成的注释别复制到自己写的sql语句中不然会被覆盖在这里插入图片描述新人原创手打、有误勿喷(手动滑稽!!!)

你可能感兴趣的:(mybatis,generator,逆向工程,sql防覆盖,原创)