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

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

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

首先我们观察我们在项目中配置的generator.xml文件的格式:
在这里插入图片描述
在这里插入图片描述
targetRuntime表示context容器将进入cn.common.mbg.introspect.MyIntrospectedTableImpl扩展类运行。
plugin标签type属性表示讲加载DaoExtPlugin插件进行扩展。

context容器:
在这里插入图片描述
接下来就开始自定义逆向工程步骤了:

方法一

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

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

方法二

1、在MyIntrospectedTableImpl类中重写getGeneratedJavaFiles方法,我们看该源码的方法
在这里插入图片描述2、重写getGeneratedJavaFiles自定义sql方法,根据文件路径判断文件是否生成,如已存在则不重新生成,避免被覆盖
在这里插入图片描述
3、重写getGeneratedXmlFiles方法,在mapper.xml文件中新增sql语句。isMergeable置为true,否则自己业务写的sql会被覆盖
在这里插入图片描述
在这里插入图片描述
生成之后的模型
在这里插入图片描述
在这里插入图片描述
4、新增业务方法,并在数据库追加字段

在这里插入图片描述
重新生成

在这里插入图片描述

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

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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值