【Mybatis】Mybatis generator自动生成插件如何修改Mapper.xml 的命名空间namespace

举报
石臻臻的杂货铺 发表于 2021/07/22 11:04:23 2021/07/22
【摘要】 这也是在扩展 Mybatis generator 的时候遇到的问题,记录一下;在上一篇文章 如何继承Mybatis中的Mapper.xml文件很重要的一点就是要让两个Mapper.xml文件的命名空间相同,这样才能够实现继承;那么既然是自动生成插件,在生成原始 Mapper.xml的时候,我要如何去修改他的命名空间呢?例如SrcTestMapper.xml 的命名空间是<mapper na...

这也是在扩展 Mybatis generator 的时候遇到的问题,记录一下;

在上一篇文章 如何继承Mybatis中的Mapper.xml文件很重要的一点就是要让两个Mapper.xml文件的命名空间相同,这样才能够实现继承;
那么既然是自动生成插件,在生成原始 Mapper.xml的时候,我要如何去修改他的命名空间呢?
例如SrcTestMapper.xml 的命名空间是<mapper namespace="com.test.dao.mapper.srctest.SrcTestMapper">
那么如何按照我的意愿修改成<mapper namespace="com.test.dao.mapper.srctest.SrcTestMapperExt">呢?

继承DefaultCommentGenerator类,并重写其中的方法


package com.weidai.common.plugin;

import com.weidai.common.util.StringUtil;
import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.dom.java.Field;
import org.mybatis.generator.api.dom.xml.Attribute;
import org.mybatis.generator.api.dom.xml.XmlElement;
import org.mybatis.generator.internal.DefaultCommentGenerator;
import java.util.List;
import java.util.Properties;

/**
 * 修改命名空间
 * 去除 myabtis generator生成的注释
 * Created by shirenchuang on 2018/6/25.
 */
public class CommentGenerator extends DefaultCommentGenerator {


	private Properties myPoperties = new Properties();

	@Override
	public void addConfigurationProperties(Properties properties) {
		super.addConfigurationProperties(properties);
		//本地保存一份properties
		this.myPoperties.putAll(properties);
	}

	@Override
	public void addFieldComment(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) {
		super.addFieldComment(field, introspectedTable, introspectedColumn);
		if (introspectedColumn.getRemarks() != null && !"".equals(introspectedColumn.getRemarks())) {
			field.addJavaDocLine("/**");
			field.addJavaDocLine(" * " + introspectedColumn.getRemarks());
			addJavadocTag(field, false);
			field.addJavaDocLine(" */");
		}
	}


	//将 namespace修改掉
	@Override
	public void addRootComment(XmlElement rootElement) {
		super.addRootComment(rootElement);
		Object replaceNamespace = myPoperties.get("replaceNamespace");
		if(null==replaceNamespace||replaceNamespace.toString().equals("false"))return;
		List<Attribute> lists =  rootElement.getAttributes();
		int delIndex = -1;String orginNameSpace="";
		for(int i = 0;i<lists.size();i++){
			if(lists.get(i).getName().equals("namespace")){
				orginNameSpace = lists.get(i).getValue();
				//if(orginNameSpace.endsWith("Ext"))break;
				delIndex = i;
				break;
			}
		}
		if(delIndex!=-1){
			lists.remove(delIndex);
			rootElement.getAttributes().add(new Attribute("namespace", orginNameSpace+"Ext"));
		}
	}
}

然后generatorConfig.xml 修改一下

    <!-- 修改命名空间 -->
            <commentGenerator type="com.weidai.common.plugin.CommentGenerator">
                <property name="suppressAllComments" value="true" />
                <property name="suppressDate" value="true"/>
             </commentGenerator>

注意一下 这个commentGenerator放置的顺序,它一定时要在 property 和 plugin 后面的;

关于上面重写方法

	@Override
	public void addConfigurationProperties(Properties properties) {
		super.addConfigurationProperties(properties);
		//本地保存一份properties
		this.myPoperties.putAll(properties);
	}

主要作用就是将properties保存一份到我们的实现类里面;然后我们可以设置属性,来做一些事情;
比如这里,我需要一个开关是否需要修改namespace;
只需要将配置文件中的commentGenerator加上 <property name="replaceNamespace" value="true"/>

 <commentGenerator type="com.weidai.common.plugin.CommentGenerator">
                <property name="suppressAllComments" value="true" />
                <property name="suppressDate" value="true"/>
                 <property name="replaceNamespace" value="true"/>
 </commentGenerator>

然后做一下判断就好了

Object replaceNamespace = myPoperties.get("replaceNamespace");
		if(null==replaceNamespace||replaceNamespace.toString().equals("false"))return;

有兴趣可以下载阅读或者直接使用我整合的
Mybatis-generator

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。