前言
最近項目需要添加mybatis的逆向工程,特總結了自己,搬磚搬的demo
1.實現的功能
主要整合了lombok插件實現getter/setter等通用方法的自動生成,同時自定義實現了一個註釋生成器, 通過抓取數據庫表裏面的註釋作爲實體類的註釋內容。
2.插件的用法
pom文件需要添加如下配置:
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
<configurationFile>
src/main/resources/generator/generatorConfig.xml
</configurationFile>
</configuration>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>3.4.4</version>
</dependency>
</dependencies>
</plugin>
- 同時添加配置文件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>
<context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<property name="javaFileEncoding" value="UTF-8"/>
<!--通用 Mapper 插件,可以生成帶註解的實體類-->
<plugin type="tk.mybatis.mapper.generator.MapperPlugin">
<property name="mappers" value="tk.mybatis.mapper.common.Mapper"/>
<property name="caseSensitive" value="true"/>
<property name="forceAnnotation" value="true"/>
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<!--配置是否啓用lombok, 支持如下6種註解-->
<!--當配置 Data 後,Getter Setter ToString EqualsAndHashCode 會被忽略-->
<property name="lombok" value="Getter,Setter,Data,ToString,Accessors,EqualsAndHashCode"/>
</plugin>
<commentGenerator>
<!-- 是否去除自動生成的註釋 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--數據庫連接的信息:驅動類、連接地址、用戶名、密碼 -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/zcw?serverTimezone=UTC" userId="root"
password="root">
<!--去除xxxWithBLOBs的影響-->
<property name="nullCatalogMeansCurrent" value="true"/>
</jdbcConnection>
<!-- 默認false,把JDBC DECIMAL 和 NUMERIC 類型解析爲 Integer,爲 true時把JDBC DECIMAL 和
NUMERIC 類型解析爲java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- targetProject:生成PO類的位置 -->
<javaModelGenerator targetPackage="com.zcw.model"
targetProject=".\src\main\java">
<!-- enableSubPackages:是否讓schema作爲包的後綴 -->
<property name="enableSubPackages" value="false" />
<!-- 從數據庫返回的值被清理前後的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- targetProject:mapper映射文件生成的位置 -->
<sqlMapGenerator targetPackage="mapper"
targetProject=".\src\main\resources">
<!-- enableSubPackages:是否讓schema作爲包的後綴 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.zcw.mapper"
targetProject=".\src\main\java">
<!-- enableSubPackages:是否讓schema作爲包的後綴 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 指定數據庫表 -->
<!-- <table schema="" tableName="tb_item" domainObjectName="Item"></table>
domainObjectName 可以配置生成的pojo名字
如不需要example類添加下面四個屬性
enableCountByExample="false" enableDeleteByExample="false"
enableSelectByExample="false" enableUpdateByExample="false"></table>-->
<table tableName="test" domainObjectName="test"
enableCountByExample="false" enableDeleteByExample="false"
enableSelectByExample="false" enableUpdateByExample="false"></table>
</context>
</generatorConfiguration>
需要加載這個jar包,目前maven倉庫沒有
下載地址爲:
3.運行效果
[INFO] Introspecting table test
[INFO] Generating Record class for table test
[INFO] Generating Mapper Interface for table test
[INFO] Generating SQL Map for table test
[INFO] Saving file testMapper.xml
[INFO] Saving file test.java
[INFO] Saving file testMapper.java
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5.654 s
[INFO] Finished at: 2020-06-24T13:19:08+08:00
- 實體類:
package com.zcw.model;
import javax.persistence.*;
@Table(name = "`test`")
public class test {
@Id
@Column(name = "`id`")
private Integer id;
/**
* 姓名
*/
@Column(name = "`name`")
private String name;
/**
* @return id
*/
public Integer getId() {
return id;
}
/**
* @param id
*/
public void setId(Integer id) {
this.id = id;
}
/**
* 獲取姓名
*
* @return name - 姓名
*/
public String getName() {
return name;
}
/**
* 設置姓名
*
* @param name 姓名
*/
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
}
- Mapper文件:
package com.zcw.mapper;
import com.zcw.model.test;
import tk.mybatis.mapper.common.Mapper;
public interface testMapper extends Mapper<test> {
}
- xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zcw.mapper.testMapper">
<resultMap id="BaseResultMap" type="com.zcw.model.test">
<!--
WARNING - @mbg.generated
-->
<id column="id" jdbcType="INTEGER" property="id" />
<result column="name" jdbcType="VARCHAR" property="name" />
</resultMap>
</mapper>