欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mybatis generato 生成的mapper映射xml出现重复代码

程序员文章站 2022-07-15 15:46:31
...

最近学习了mybaties ,学习了使用mybatis generator自动生成映射mapper.xml文件, 使用流程是首先创建maven项目, 在resources生成 mybatis-generator-config.xml配置文件 内容如下:

<?xml version="1.0" encoding="UTF-8"?>
    <!-- 4targetProject:生成PO类的位置 -->
    <javaModelGenerator targetPackage="com.test.po"
                        targetProject="src/main/java">
        <!-- enableSubPackages:是否让schema作为包的后缀 -->
        <property name="enableSubPackages" value="false" />
        <!-- 从数据库返回的值被清理前后的空格 -->
        <property name="trimStrings" value="true" />
    </javaModelGenerator>
    <!-- 5targetProject:mapper映射文件生成的位置
       如果maven工程只是单独的一个工程,targetProject="src/main/java"
       若果maven工程是分模块的工程,targetProject="所属模块的名称",例如:
       targetProject="ecps-manager-mapper",下同-->
    <sqlMapGenerator targetPackage="com.test.dao"
                     targetProject="src/main/java">
        <!-- enableSubPackages:是否让schema作为包的后缀 -->
        <property name="enableSubPackages" value="false" />
    </sqlMapGenerator>
    <!-- 6targetPackage:mapper接口生成的位置 -->
    <javaClientGenerator type="XMLMAPPER"
                         targetPackage="com.test.dao"
                         targetProject="src/main/java">
        <!-- enableSubPackages:是否让schema作为包的后缀 -->
        <property name="enableSubPackages" value="false" />
    </javaClientGenerator>
    <!-- 7指定数据库表 -->
    <table  tableName="book_info"
            enableCountByExample="false"
            enableDeleteByExample="false"
            enableSelectByExample="true"
            enableUpdateByExample="false"
    >
        <property name="modelOnly" value="false" />
    </table>
    <table
            tableName="book_type"
            enableCountByExample="false"
            enableDeleteByExample="false"
            enableSelectByExample="true"
            enableUpdateByExample="false"
   
        <property name="modelOnly" value="false" />
    </table>
    <!--example:https://blog.csdn.net/sinat_30474567/article/details/72625651-->
</context>

然后在pom.xml配置对应的插件和需要的依赖包dependency
然后需要在上面的配置文件改一下内容,

mybatis generato 生成的mapper映射xml出现重复代码
最后点击edit configurations 添加mavenn命令mybatis-generator:generate -e,
执行一下,对应数据库里的实体类以及mapper接口以及映射xml就会自动生成了。

在生成完后发现出了一些问题,执行单元测试时报错 org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: java.lang.IllegalArgumentException: Result Maps collection already contains value for com.neu.dao.EmpMapper.BaseResultMap

去对应的xml映射文件去看了一下,原来是生成映射文件xml生成了两次代码,resultmap生成了两次,很多方法也生成了两次,当然对于这个问题最直接的解决办法就是删除重复的,可是一但实体类比较多就删除比较麻烦了。
我去网上找了很多解决办法,导致的原因好像是mysql并不是完全支持这种创建模式,因此mgb(mybatis generator)创建有可能从其他数据库中找到与你表名相同的也会进行创建,因此就会出现 创建重复,解决办法有很多种
1.mybatis generato 生成的mapper映射xml出现重复代码
在mgb配置文件的指定数据库表的地方加上schema="数据库名"对表加以区分,这样就可以解决了,但是mysql 8是不支持schema的,使用mysql8.0.11的我就要另行想办法了
2.
mybatis generato 生成的mapper映射xml出现重复代码
在mgb配置文件中把该部分注释掉就可以了,这样就是默认添加注释,然后测试了一下,确实没有再生成重复的resultmap和重复方法。这个解决办法的原理也不懂,但是确实测试过有效

3.mysql 8 对于第一种解决方法无法使用,但是官方给出了解决办法,jdbc连接新增nullCatalogMeansCurrent属性:

mybatis generato 生成的mapper映射xml出现重复代码
mysql 8 可以通过添加这个属性解决这种问题,代码就按照上面图中的示例就可以了

<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/db?useUnicode=true&amp;characterEncoding=utf-8"
                        userId="root" password="root">
            <property name="nullCatalogMeansCurrent" value="true" />
        </jdbcConnection>

官方解释:
http://www.mybatis.org/generator/usage/mysql.html