spring boot集成mybatis generator遇到的问题
我在使用mybatis generator生成代码的时候,遇到一个问题:生成的xml文件中,有很多的重复代码。比如resultMap。是因为我在测试使用的表在其他的库中也存在(MySQL多个数据库有同一样的表)。
在网上找了很久,找到一个方法是在generatorConfig.xml的table标签中添加 catalog=“blog”(blog是当前使用的库名称)。这样的话xml中代码不会重复了。但是生成的sql还是存在问题(比如update blog…os_user set 字段=值 会在表名前边添加数据库名…这样的话还是不够完善)。最后在CSDN偶然看到一篇博客,上边介绍了如何解决这个问题。
就是在generatorConfig.xml中的jdbcConnection中添加<property name="nullCatalogMeansCurrent" value="true"/>
添加上这个就可以解决问题了
下边贴上完整的generatorConfig.xml代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!--数据库驱动jar 在maven插件中声明-->
<!--<classPathEntry location="D:\Apache\maven3.6.1\maven-repository\mysql\mysql-connector-java\5.1.39\mysql-connector-java-5.1.39.jar" />-->
<context id="DB2Tables" targetRuntime="MyBatis3">
<!-- 生成的Java文件的编码 -->
<property name="javaFileEncoding" value="UTF-8"/>
<commentGenerator>
<!-- 默认值false,所有生成的元素都会包含用来说明这是生成元素的注释。true不会往生成的元素中添加任何注释。如果这个值设为true,那么所有的代码合并都会被禁用。 -->
<property name="suppressAllComments" value="true" />
<!-- 默认值 false,所有元素生成注释时都会带着生成时间。true注释中不会添加时间戳。 -->
<property name="suppressDate" value="true"/>
<!-- 此处为 true 时,生成的 Model 包含对应表字段注释 -->
<property name="addRemarkComments" value="true"/>
<!-- 此处为 true 时,生成的 Mapper 接口将增加 @Mapper 注解,Spring ComponentScan 时可自动识别 -->
<property name="addMapperAnnotation" value="true"/>
</commentGenerator>
<!--数据库连接 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/blog?serverTimezone=Asia/Shanghai"
userId="root"
password="111111">
<!--MySQL 不支持 schema 或者 catalog 所以需要添加这个-->
<!--参考 : http://www.mybatis.org/generator/usage/mysql.html-->
<property name="nullCatalogMeansCurrent" value="true"/>
</jdbcConnection>
<!--默认false
Java type resolver will always use java.math.BigDecimal if the database column is of type DECIMAL or NUMERIC.
-->
<javaTypeResolver >
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!--生成实体类 指定包名 以及生成的地址 (可以自定义地址,但是路径不存在不会自动创建 使用Maven生成在target目录下,会自动创建) -->
<javaModelGenerator targetPackage="com.itgo.springboot.entity" targetProject="src\main\java">
<!-- 去掉表名前面的schema,如果 enableSubPackages 属性设置为 false, 那么包名将会是 test.model而不是test.model.db2admin -->
<property name="enableSubPackages" value="false" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!--生成SQLMAP文件 -->
<sqlMapGenerator targetPackage="mapper" targetProject="src\main\resources">
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- 生成Dao文件 可以配置 type="XMLMAPPER"生成xml的dao实现 context id="DB2Tables" 修改targetRuntime="MyBatis3" -->
<!-- ANNOTATEDMAPPER 接口将会基于注解和 MyBatis 3.x SqlProviders。不会有XML文件生成。(注:就是纯接口使用注解的形式,不会有XML文件)依赖 MyBatis 3.0.4 或更高版本。 -->
<!-- MIXEDMAPPER 接口将基于注解和XML的混合形式。 注解将会用在简单注解可以实现的地方。 此客户端不会生成SqlProvider,所有复杂的动态SQL都会生成在XML中。 -->
<!-- XMLMAPPER 接口将会依赖于生成的XML文件。 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.itgo.springboot.mapper" targetProject="src\main\java">
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!--对应数据库表 mysql可以加入主键自增 字段命名 忽略某字段等-->
<table tableName="os_user" domainObjectName="OsUser">
</table>
<!-- maven命令方式运行 , mvn mybatis-generator:generate -->
<!-- maven命令添加参数 , mvn -Dmybatis.generator.overwrite=true mybatis-generator:generate -->
</context>
</generatorConfiguration>