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

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

<dependency>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-core</artifactId>
    <version>1.3.4</version>
</dependency>

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

<context id="Mysql" targetRuntime="MyBatis3" defaultModelType="flat">

或者

<context id="Mysql" targetRuntime="Mybatis3Simple" defaultModelType="flat">

其中,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中进行如下配置更改

<context id="Mysql" targetRuntime="com.xxx.xxx.mybatis.generator.plugin.TkMyBatis3SimpleImpl" defaultModelType="flat">
<!-- tableName="%"时表示生成所有表 -->
<table tableName="%" enableSelectByExample="false" enableDeleteByExample="false"
    enableCountByExample="false" enableUpdateByExample="false" mapperName="{0}Dao">

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

 

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

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值