解决 mybatis generator 覆盖生成mapper.xml时,xml中内容重复的问题

问题:

使用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中代码:

解决 mybatis generator 覆盖生成mapper.xml时,xml中内容重复的问题_第1张图片

低版本中,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 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配置中,添加该插件:

解决 mybatis generator 覆盖生成mapper.xml时,xml中内容重复的问题_第2张图片

这样以后重新生成mapper.xml时就不会再重复了。

 

 

 

 

你可能感兴趣的:(Mybatis)