问题:
使用mybatis generator生成mapper.xml时,如果原来已经存在该Mapper.xml,再次生成时(比如开发过程中修改了数据库,需要重新生成pojo和mapper),会出现Mapper.xml中内容重复的问题。、
解决方法:
高版本mybatis(如1.3.7)中,已经修复该问题了, 如果使用的是低版本的mybatis,可以参考高版本mybatis的代码,自行改造mybatis的jar包。
mybatis-generator-core-1.3.7.jar中代码:
低版本中,GeneratedXmlFile中的isMergeable 属性(该属性决定生成mapper.xml时是否合并)是私有的,并且没有set方法,所以可以通过反射,强制修改该字段值为false,参考代码如下:
import org.mybatis.generator.api.GeneratedXmlFile;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.PluginAdapter;
import java.lang.reflect.Field;
import java.util.List;
/**
* 修复mybatis生成mapper.xml时会重复的问题
*
* @author DangerShi
* @date 2020/5/7
*/
public class UnmergeableXmlMappersPlugin extends PluginAdapter {
public boolean validate(List<String> warnings) {
return true;
}
public boolean sqlMapGenerated(GeneratedXmlFile sqlMap, IntrospectedTable introspectedTable) {
try {
Field isMergeable = GeneratedXmlFile.class.getDeclaredField("isMergeable");
isMergeable.setAccessible(true);
isMergeable.setBoolean(sqlMap, false);
} catch (Exception e) {
e.printStackTrace();
}
return true;
}
}
之后在mybatis-generator的config配置中,添加该插件:
这样以后重新生成mapper.xml时就不会再重复了。