mybatis generator修改mapper接口和xml文件为Dao的形式,同时修改resultMap的id

要达到要求,必须使用1.3.4以上,只有1.3.4才增加了mapperName,我这种方式不需对源码进行修改。


    org.mybatis.generator
    mybatis-generator-core
    1.3.4

先说下思路,generatorConfig.xml中有如下配置

或者

其中,targetRuntime="MyBatis3"对应的就是IntrospectedTableMyBatis3Impl,而targetRuntime="Mybatis3Simple"对应的是IntrospectedTableMyBatis3SimpleImpl,思路就是继承他们,重写里面的方法,然后targetRuntime换成自己写的类。

比如,我原来的配置是targetRuntime="Mybatis3Simple",这时候我只需要继承IntrospectedTableMyBatis3SimpleImpl,然后重写以下三个方法就可以了(targetRuntime="MyBatis3"也类似,只是继承IntrospectedTableMyBatis3Impl类,不过重写的那三个方法都是一模一样的)。

package com.xxx.xxx.mybatis.generator.plugin;

import java.text.MessageFormat;

import org.mybatis.generator.codegen.mybatis3.IntrospectedTableMyBatis3Impl;
import org.mybatis.generator.internal.util.StringUtility;

public class TkMyBatis3SimpleImpl extends IntrospectedTableMyBatis3Impl{

	/**
	 * 	修改生成的mapper xml文件中resultMap的id,原来为BaseResultMap,现修改为实体类名称
	 */
	@Override
	public void setBaseResultMapId(String s) {
        // 实体类名称
		String objectName = fullyQualifiedTable.getDomainObjectName();
		// 将resultMap的id设置为实体类首字母小写
        objectName = objectName.substring(0, 1).toLowerCase() + objectName.substring(1);
		super.setBaseResultMapId(objectName);
	}
	
	@Override
	protected String calculateMyBatis3XmlMapperFileName() {
		StringBuilder sb = new StringBuilder();
        if (StringUtility.stringHasValue(tableConfiguration.getMapperName())) {
            String mapperName = tableConfiguration.getMapperName();
            int ind = mapperName.lastIndexOf('.');
            if (ind != -1) {
                mapperName = mapperName.substring(ind + 1);
            }
            //支持mapperName = "{0}Dao" 等用法
            sb.append(MessageFormat.format(mapperName, fullyQualifiedTable.getDomainObjectName()));
            sb.append(".xml"); //$NON-NLS-1$
        } else {
            sb.append(fullyQualifiedTable.getDomainObjectName());
            sb.append("Mapper.xml"); //$NON-NLS-1$
        }
        return sb.toString();
	}
	
	@Override
	protected void calculateJavaClientAttributes() {
		if (context.getJavaClientGeneratorConfiguration() == null) {
            return;
        }

        StringBuilder sb = new StringBuilder();
        sb.append(calculateJavaClientImplementationPackage());
        sb.append('.');
        sb.append(fullyQualifiedTable.getDomainObjectName());
        sb.append("DAOImpl"); //$NON-NLS-1$
        setDAOImplementationType(sb.toString());

        sb.setLength(0);
        sb.append(calculateJavaClientInterfacePackage());
        sb.append('.');
        sb.append(fullyQualifiedTable.getDomainObjectName());
        sb.append("DAO"); //$NON-NLS-1$
        setDAOInterfaceType(sb.toString());

        sb.setLength(0);
        sb.append(calculateJavaClientInterfacePackage());
        sb.append('.');
        if (StringUtility.stringHasValue(tableConfiguration.getMapperName())) {
            //支持mapperName = "{0}Dao" 等用法
            sb.append(MessageFormat.format(tableConfiguration.getMapperName(), fullyQualifiedTable.getDomainObjectName()));
        } else {
            sb.append(fullyQualifiedTable.getDomainObjectName());
            sb.append("Mapper"); //$NON-NLS-1$
        }
        setMyBatis3JavaMapperType(sb.toString());

        sb.setLength(0);
        sb.append(calculateJavaClientInterfacePackage());
        sb.append('.');
        if (StringUtility.stringHasValue(tableConfiguration.getSqlProviderName())) {
            //支持mapperName = "{0}SqlProvider" 等用法
            sb.append(MessageFormat.format(tableConfiguration.getSqlProviderName(), fullyQualifiedTable.getDomainObjectName()));
        } else {
            sb.append(fullyQualifiedTable.getDomainObjectName());
            sb.append("SqlProvider"); //$NON-NLS-1$
        }
        setMyBatis3SqlProviderType(sb.toString());
	}
	
}

然后,在generatorConfig.xml中进行如下配置更改


注意第二个的mapperName="{0}Dao",其实到最后mapper接口和xml文件名就会生成为实体类+Dao的方式。

 

最后还是按照以前的方式生成代码就可以了。

 

说明:本文部分代码参考了https://blog.csdn.net/isea533/article/details/52430691

你可能感兴趣的:(java基础,java,web,mybatis,generator)