mybatis generator 自定义 ,xml 文件名称和内容自定义,dao名称自定义

最近在用mybatis generator 生成代码的时候,生成的xml文件 和类文件 不是自己想要的,于是修改mybatis generator 的源码,重写方法来达到效果,这里记录一下,后期如果需要还可以随便改成自己想要的!

一 修改注释

     mybatis generator 生成的注释不是自己想要的中文注释,默认是不生成注释的,如果开启注释,用mybatis generator 自带的生成的注释带的东西全是英文,而且不是自己想要的中午注释!

   网上有很多例子不想写了,我认为比较好的,解释的很清楚。

问题的关键是是放弃默认实现CommentGenerator接口的类DefaultCommentGenerator。自己重新实现CommentGenerator,主要重新定义,截图

如下

红线部分 的修改因为,实体类实现serializable接口的时候 ,serialVersionUID位置修改成第一行(反正我generatorConfig.xml加开启的时候,生成他的位置不是首行乱放),这样解决了注释问题

二类文件名称问题

   在generatorConfig.xml 看到这么一个关键字,主要用来生成文件的实现类,我这里改成了自己的。

源码自带的有这么几种实现方式有mybatis的和ibatis的  如图

下面主要说是我定义一个类重新实现IntrospectedTableMyBatis3Impl

 

代码如下

package generator.mbgcomment;

import org.mybatis.generator.api.ProgressCallback;
import org.mybatis.generator.codegen.AbstractJavaClientGenerator;
import org.mybatis.generator.codegen.mybatis3.IntrospectedTableMyBatis3Impl;
import org.mybatis.generator.codegen.mybatis3.xmlmapper.XMLMapperGenerator;

import java.text.MessageFormat;
import java.util.List;

import static org.mybatis.generator.internal.util.StringUtility.stringHasValue;

//MyBatis3 的实现
public class TkMyBatis3Impl extends IntrospectedTableMyBatis3Impl {
    @Override
    protected void calculateXmlMapperGenerator(AbstractJavaClientGenerator javaClientGenerator, List<String> warnings, ProgressCallback progressCallback) {
        if (javaClientGenerator == null) {
            if (this.context.getSqlMapGeneratorConfiguration() != null) {
                this.xmlMapperGenerator = new MyXMLMapperGenerator();
            }
        } else {
            this.xmlMapperGenerator = new MyXMLMapperGenerator();;
        }

        this.initializeAbstractGenerator(this.xmlMapperGenerator, warnings, progressCallback);
    }
    @Override
    protected String calculateMyBatis3XmlMapperFileName() {
        StringBuilder sb = new StringBuilder();
        if (stringHasValue(tableConfiguration.getMapperName())) {
            String mapperName = tableConfiguration.getMapperName();
            int ind = mapperName.lastIndexOf('.');
            if (ind != -1) {
                mapperName = mapperName.substring(ind + 1);
            }
            //支持mapperName = "{0}Dao" 等用法

            sb.append(fullyQualifiedTable.getDomainObjectName().substring(2,fullyQualifiedTable.getDomainObjectName().length())+"Mapper");
           // sb.append(MessageFormat.format(mapperName, fullyQualifiedTable.getDomainObjectName()));
            sb.append(".xml"); //$NON-NLS-1$
        } else {
            sb.append(fullyQualifiedTable.getDomainObjectName().substring(2,fullyQualifiedTable.getDomainObjectName().length()));
            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().substring(2,fullyQualifiedTable.getDomainObjectName().length()));
        sb.append("DAOImpl"); //$NON-NLS-1$
        setDAOImplementationType(sb.toString());

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

        sb.setLength(0);
        sb.append(calculateJavaClientInterfacePackage());
        sb.append('.');
        if (stringHasValue(tableConfiguration.getMapperName())) {
            //支持mapperName = "{0}Dao" 等用法
            sb.append(MessageFormat.format(tableConfiguration.getMapperName(), fullyQualifiedTable.getDomainObjectName().substring(2,fullyQualifiedTable.getDomainObjectName().length())));
        } else {
            sb.append(fullyQualifiedTable.getDomainObjectName().substring(2,fullyQualifiedTable.getDomainObjectName().length()));

            sb.append("Mapper"); //$NON-NLS-1$
        }
        setMyBatis3JavaMapperType(sb.toString());

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

详解每个方法的用处

图一

这个方法我下面再说

图二generatorConfig.xml 配置

图三修改实现类

图四

图二代码的意思是我要把Mapper 接口和mapper.xml改成 TbSystemModelDao 和TbSystemModelDaoMapper.xml  

但在还是达不到效果

图三加上图四红线部分就是修改mapper.xml 和dao名称。我想达到的效果是 接口改成SystemModelDao.java,映射文件改成SystemMapper.xml,而DomainObjectName是TbSystemModel,如果不做修改这里mapper.xml就变成TbSystemDao.xml ,接口dao就是TbSystemDao,但是这不是我想要的

三修改mapper.xml 生成的内容

 

  我值举一个例子剩下的我会把项目放到git 上面 我举一个查询的例子

 

首先第一步就是上面刚刚看的图一

红线部分是生成xml 内容的类,我自己重新写了一个,里面有很多方法 生成增删该查 resultMap 等等的方法 如图

红线部分添加自己需要的方法,现在我们想改select方法,点击进去 

红线部分是自己写的实现类

 

好了到了这里 怎么生成sql  ,xml需要的内容有你掌控,同理改其他sql等等 也由你定,一样的方式

 

项目地址 https://github.com/15726698950/mbg-comment

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值