【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;


目录
相关文章
|
12月前
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于 xml 的整合
本教程介绍了基于XML的MyBatis整合方式。首先在`application.yml`中配置XML路径,如`classpath:mapper/*.xml`,然后创建`UserMapper.xml`文件定义SQL映射,包括`resultMap`和查询语句。通过设置`namespace`关联Mapper接口,实现如`getUserByName`的方法。Controller层调用Service完成测试,访问`/getUserByName/{name}`即可返回用户信息。为简化Mapper扫描,推荐在Spring Boot启动类用`@MapperScan`注解指定包路径避免逐个添加`@Mapper`
720 0
|
9月前
|
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`注解完成整合
1447 1
Spring boot 使用mybatis generator 自动生成代码插件
|
10月前
|
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;`实现代码复用,优化维护效率。
969 5
|
12月前
|
XML Java 数据库连接
二、搭建MyBatis采用xml方式,验证CRUD(增删改查操作)
二、搭建MyBatis采用xml方式,验证CRUD(增删改查操作)
377 21
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
714 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
|
SQL 缓存 Java
MyBatis如何关闭一级缓存(分注解和xml两种方式)
MyBatis如何关闭一级缓存(分注解和xml两种方式)
667 5
|
XML 数据格式 开发者
XML 命名空间
XML 命名空间
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
312 1
|
12月前
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于注解的整合
本文介绍了Spring Boot集成MyBatis的两种方式:基于XML和注解的形式。重点讲解了注解方式,包括@Select、@Insert、@Update、@Delete等常用注解的使用方法,以及多参数时@Param注解的应用。同时,针对字段映射不一致的问题,提供了@Results和@ResultMap的解决方案。文章还提到实际项目中常结合XML与注解的优点,灵活使用两者以提高开发效率,并附带课程源码供下载学习。
895 0
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
668 2