之前开发过程都是使用同事构建MyBatis Generator的dao层,使用过程发现存在以下问题
1、生成的实体类字段没有获取到对应的数据库备注信息。
2、每次构建时都会再mapper.xml后面添加重复数据。
3、生成的xml文件存在大量无用的sql,查找对应的sql比较麻烦。
经过查询资料后找到 tk.mybatis。
主要搭建如下:
1、pom文件中添加 tk.mybatis 相关的依赖
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.1.5</version>
</dependency>
2、pom文件新增plugin
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.6</version>
<configuration>
<configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
<overwrite>true</overwrite>
<verbose>true</verbose>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.3</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>4.1.5</version>
</dependency>
</dependencies>
</plugin>
其中的oracle无法通过maven之间下载,得下载后在本地构建。主要测试oracle/mysql是否正常生成实体类中的注释,所以添加了两个依赖。
3、新增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>
<!--<properties resource="config.properties"/>-->
<context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<property name="javaFileEncoding" value="UTF-8"/>
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<plugin type="tk.mybatis.mapper.generator.MapperPlugin">
<property name="mappers" value="tk.mybatis.mapper.common.Mapper"/>
</plugin>
<commentGenerator>
<!-- 是否去除自动生成的注释 -->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!-- 数据库连接信息 -->
<jdbcConnection
driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC"
userId=""
password="">
<property name="nullCatalogMeansCurrent" value="true"/>
<property name="useInformationSchema" value="true"></property>
</jdbcConnection>
<!-- 数据库连接信息 -->
<!--<jdbcConnection-->
<!--driverClass="oracle.jdbc.driver.OracleDriver"-->
<!--connectionURL="jdbc:oracle:thin:@127.0.0.1:orcl"-->
<!--userId="test"-->
<!--password="test">-->
<!--<property name="nullCatalogMeansCurrent" value="true"/>-->
<!--<property name="remarksReporting" value="true"></property>-->
<!--</jdbcConnection>-->
<javaModelGenerator targetPackage="com.fjwen.security.model" targetProject="src/main/java"/>
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"/>
<javaClientGenerator targetPackage="com.fjwen.security.mapper" targetProject="src/main/java"
type="XMLMAPPER"/>
<table tableName="um_t_user">
<generatedKey column="id" sqlStatement="JDBC"/>
</table>
<!--oracle主键设置-->
<!--<table tableName="um_t_test">-->
<!--<generatedKey column="id" sqlStatement="select um_t_test_SEQ.nextval from dual"/>-->
<!--<columnOverride column="id" javaType="java.lang.Long"/>-->
<!--</table>-->
</context>
</generatorConfiguration>
其中数据源配置那里加入下面的内容:
<!-- 针对oracle数据库 --> <property name="remarksReporting" value="true"></property>
<!-- 针对mysql数据库 --> <property name="useInformationSchema" value="true"></property>
通过该设置可正常在实体类中生成对应的数据库字段注释。
生成后的实体类代码如下:
生成的mapper.xml文件
生成的mapper文件如下
package com.fjwen.security.mapper;
import com.fjwen.security.model.UmTUser;
import tk.mybatis.mapper.common.Mapper;
public interface UmTUserMapper extends Mapper<UmTUser> {
}