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

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

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


目录
相关文章
|
6月前
|
Java 数据库连接 数据库
Spring boot 使用mybatis generator 自动生成代码插件
本文介绍了在Spring Boot项目中使用MyBatis Generator插件自动生成代码的详细步骤。首先创建一个新的Spring Boot项目,接着引入MyBatis Generator插件并配置`pom.xml`文件。然后删除默认的`application.properties`文件,创建`application.yml`进行相关配置,如设置Mapper路径和实体类包名。重点在于配置`generatorConfig.xml`文件,包括数据库驱动、连接信息、生成模型、映射文件及DAO的包名和位置。最后通过IDE配置运行插件生成代码,并在主类添加`@MapperScan`注解完成整合
1219 1
Spring boot 使用mybatis generator 自动生成代码插件
|
7月前
|
SQL Java 数据安全/隐私保护
发现问题:Mybatis-plus的分页总数为0,分页功能失效,以及多租户插件的使用。
总的来说,使用 Mybatis-plus 确实可以极大地方便我们的开发,但也需要我们理解其工作原理,掌握如何合适地使用各种插件。分页插件和多租户插件是其中典型,它们的运用可以让我们的代码更为简洁、高效,理解和掌握好它们的用法对我们的开发过程有着极其重要的意义。
757 15
|
7月前
|
SQL XML Java
菜鸟之路Day35一一Mybatis之XML映射与动态SQL
本文介绍了MyBatis框架中XML映射与动态SQL的使用方法,作者通过实例详细解析了XML映射文件的配置规范,包括namespace、id和resultType的设置。文章还对比了注解与XML映射的优缺点,强调复杂SQL更适合XML方式。在动态SQL部分,重点讲解了`&lt;if&gt;`、`&lt;where&gt;`、`&lt;set&gt;`、`&lt;foreach&gt;`等标签的应用场景,如条件查询、动态更新和批量删除,并通过代码示例展示了其灵活性与实用性。最后,通过`&lt;sql&gt;`和`&lt;include&gt;`实现代码复用,优化维护效率。
730 5
|
9月前
|
XML Java 数据库连接
二、搭建MyBatis采用xml方式,验证CRUD(增删改查操作)
二、搭建MyBatis采用xml方式,验证CRUD(增删改查操作)
330 21
|
10月前
|
XML SQL Java
十二、MyBatis分页插件
十二、MyBatis分页插件
329 17
|
SQL Java 数据库连接
深入 MyBatis-Plus 插件:解锁高级数据库功能
Mybatis-Plus 提供了丰富的插件机制,这些插件可以帮助开发者更方便地扩展 Mybatis 的功能,提升开发效率、优化性能和实现一些常用的功能。
1465 26
深入 MyBatis-Plus 插件:解锁高级数据库功能
|
SQL Java 数据库连接
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。本文讲解了最新版MP的使用教程,包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段等核心功能。
1958 5
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
7月前
|
Android开发 开发者
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
本文详细介绍了如何通过自定义 `attrs.xml` 文件实现 Android 自定义 View 的属性配置。以一个包含 TextView 和 ImageView 的 DemoView 为例,讲解了如何使用自定义属性动态改变文字内容和控制图片显示隐藏。同时,通过设置布尔值和点击事件,实现了图片状态的切换功能。代码中展示了如何在构造函数中解析自定义属性,并通过方法 `setSetting0n` 和 `setbackeguang` 实现功能逻辑的优化与封装。此示例帮助开发者更好地理解自定义 View 的开发流程与 attrs.xml 的实际应用。
218 2
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
|
XML 前端开发 Java
讲解SSM的xml文件
本文详细介绍了SSM框架中的xml配置文件,包括springMVC.xml和applicationContext.xml,涉及组件扫描、数据源配置、事务管理、MyBatis集成以及Spring MVC的视图解析器配置。
295 1