你这个问题也困扰我好久,在网上找了很多资料,只找到这一篇:
https://blog.csdn.net/HK2311/article/details/80536901
我试着做了一下,可以实现。但是上面这篇里面写的不太清楚,我稍微整理了一下,供参考。
大致的思路就是,比如有一张表Test,运行mybatis-generator后会生成一个叫Test.java的POJO,一个叫TestMapper.java的DAO接口,以及对应的TestMapper.xml。
现在建一个BaseTestMapper.java的DAO接口,使TestMapper继承BaseTestMapper;
再建一个BaseTestMapper.xml对应BaseTestMapper.java中的接口。
这样,自已添加的SQL时,只要修改BaseTestMapper.java中的接口,并在BaseTestMapper.xml写入对应的SQL。
具体就是:
1、在generatorConfig.xml中的table节点中增加一个配置
<property name="rootInterface" value="com.xxx.dao.BaseTestMapper"/>
2、运行mybatis-generator后,自动生成POJO、DAO和Mapper,可以看到,生成的DAO中已经自动把extends BaseTestMapper添加上去了
3、在DAO层中创建一个BaseTestMapper接口,作为TestMapper的父级,并把需要添加的功能全部写在这里
4、在Mapper中创建一个BaseTestMapper.xml,里面的<mapper>节点中的namespace参数要写的跟TestMapper.xml一样。把需要添加的SQL全部写在这个文件里。
在Controller中使用DAO时,还是照样使用TestMapper。
这样一来,以后如遇到表结构变化,需要重新运行mybatis-generator时,直接运行就可以,因为我们自已添加的代码全部写在了BaseTestMapper.java和BaseTestMapper.xml中了。
这个办法有点奇怪,因为我一开始的想法是应该把mybatis-generator生成的DAO作为父类,自定义的作为子类从它继承,但是试过以后发现不行,具体我也不解释了。
这个应该不是最好的办法,但是目前是能够解决一下这个问题。希望 Geely老师看看顺着这个思路,有没有更好的办法。。。