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

简介: 这也是在扩展 Mybatis generator 的时候遇到的问题,记录一下;在上一篇文章 如何继承Mybatis中的Mapper.xml文件很重要的一点就是要让两个Mapper.xml文件的命名空间相同,这样才能够实现继承; 那么既然是自动生成插件,在生成原始 Mapper.xml的时候,我要如何去修改他的命名空间呢? 例如

作者石臻臻, CSDN博客之星Top5Kafka Contributornacos Contributor华为云 MVP ,腾讯云TVP, 滴滴Kafka技术专家KnowStreaming


KnowStreaming  是滴滴开源的Kafka运维管控平台, 有兴趣一起参与参与开发的同学,但是怕自己能力不够的同学,可以联系我,当你导师带你参与开源!

这也是在扩展  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

相关文章
|
1月前
|
XML Java 数据库连接
mybatis中在xml文件中通用查询结果列如何使用
mybatis中在xml文件中通用查询结果列如何使用
35 0
|
4天前
|
XML Java 数据库连接
MyBatis 解决上篇的参数绑定问题以及XML方式交互
MyBatis 解决上篇的参数绑定问题以及XML方式交互
8 0
|
13天前
|
XML SQL Java
IntelliJ IDEA 插件 MybatisX 在mapper和xml间跳转
IntelliJ IDEA 插件 MybatisX 在mapper和xml间跳转
|
21天前
|
XML Java 数据库连接
Javaweb之Mybatis的XML配置文件的详细解析
Javaweb之Mybatis的XML配置文件的详细解析
17 0
|
2月前
|
Java 数据库连接 mybatis
Mybatis+mysql动态分页查询数据案例——Mybatis的配置文件(mybatis-config.xml)
Mybatis+mysql动态分页查询数据案例——Mybatis的配置文件(mybatis-config.xml)
20 1
|
2月前
Mybatis+mysql动态分页查询数据案例——配置映射文件(HouseDaoMapper.xml)
Mybatis+mysql动态分页查询数据案例——配置映射文件(HouseDaoMapper.xml)
17 1
|
2月前
ssm(Spring+Spring mvc+mybatis)——web.xml
ssm(Spring+Spring mvc+mybatis)——web.xml
13 0
|
2月前
|
Java Spring
ssm(Spring+Spring mvc+mybatis)Spring配置文件——applicationContext.xml
ssm(Spring+Spring mvc+mybatis)Spring配置文件——applicationContext.xml
11 0
|
2月前
|
Java 数据库连接 mybatis
mybatis简单案例源码详细【注释全面】——Dao层映射文件(UserMapper.xml)【重要】
mybatis简单案例源码详细【注释全面】——Dao层映射文件(UserMapper.xml)【重要】
11 0
|
2月前
|
SQL Java 数据库连接
Mybatis中Mapper.xml 文件使用注释遇到的坑
Mybatis中Mapper.xml 文件使用注释遇到的坑