mybatis-generator是一款在使用mybatis框架時,根據我們的數據庫表,自動生成對應model,dao和mapper的工具,很大程度上減少了業務開發人員的手動編碼時間,接下來我們來了解它的用法。
在pom.xml中添加插件
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<configuration>
<!--配置文件存放的位置,一般不用配置,它會自動到這個位置去尋找-->
<configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
<!--是否覆蓋,新生成的mapper接口\java類\mapper文件會覆蓋老的-->
<overwrite>true</overwrite>
</configuration>
</plugin>
</plugins>
配置generatorConfig.xml文件
- 只需要把generatorConfig.xml放在maven工程的src/main/resources下就可以自動讀取
- 注意:下面配置的標籤是有順序的
<?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>
<!-- 在MBG工作的時候,需要額外加載的依賴包
location屬性指明加載jar/zip包的全路徑,注意版本-->
<classPathEntry location="C:\Users\L7832\Desktop\project\mysql-connector-java-8.0.17.jar" />
<context id="DB2Tables" targetRuntime="MyBatis3">
<!--不再追加xml內容,我們在插件中設置了新生成的mapper接口\java類\mapper文件會覆蓋老的,
但是我們發現mapper.xml文件並不是覆蓋,而是追加 。因爲只有加了下面這個插件後才能覆蓋-->
<plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin" />
<!--當suppressAllComments設置爲true的時候,生成的文件中就不會有註解了,使得代碼更清爽-->
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!-- 必須要有的,使用這個配置鏈接數據庫-->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://127.0.0.1:3306/mall?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false"
userId="root"
password="4589856">
<!--解決mysql8.x驅動會生成用戶下多個庫下表的問題,true表示只生成connectionURL指定數據庫下的表,而不是userId用戶能看到的所有數據庫中同名的表。
例如:root用戶下有db1和db2兩個數據庫,這兩個庫中都有tb_user表,當nullCatalogMeansCurrent設置爲false時,
儘管connectionURL指定的是db1數據庫,但是db2數據庫中的tb_user表同樣也會生成對應的實體類-->
<property name="nullCatalogMeansCurrent" value="true"/>
</jdbcConnection>
<!-- java類型處理器
用於處理DB中的類型到Java中的類型,默認使用JavaTypeResolverDefaultImpl;
注意一點,默認會先嚐試使用Integer,Long,Short等來對應DECIMAL和 NUMERIC數據類型;
-->
<javaTypeResolver >
<!--
true:使用BigDecimal對應DECIMAL和 NUMERIC數據類型
false:默認,
scale>0;length>18:使用BigDecimal;
scale=0;length[10,18]:使用Long;
scale=0;length[5,9]:使用Integer;
scale=0;length<5:使用Short;
-->
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- java模型創建器,是必須要的元素(創建java類)
targetPackage:生成的類要放的包,真實的包受enableSubPackages屬性控制;
targetProject:目標項目,指定一個存在的目錄下,生成的內容會放到指定目錄中,如果目錄不存在,MBG不會自動建目錄(不用改)
targetProject/targetPackage就是我們要生成的java類放在哪個目錄下(src/main/java/com.lxc.mall.pojo)
-->
<javaModelGenerator targetPackage="com.lxc.mall.pojo" targetProject="src/main/java">
<!-- 在targetPackage的基礎上,根據數據庫的schema再生成一層package,最終生成的類放在這個package下,默認爲false -->
<property name="enableSubPackages" value="true" />
<!--因爲我一般使用Lombok來生成getter\setter,所以不要這個設置-->
<!-- 設置是否在getter方法中,對String類型字段調用trim()方法 -->
<!--<property name="trimStrings" value="true" />-->
</javaModelGenerator>
<!-- 生成SQL map的XML文件生成器(創建mapper文件)
targetPackage/targetProject就是我們要生成的mapper文件放在哪個目錄下(src/main/resources/mapper)
-->
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
<!-- 在targetPackage的基礎上,根據數據庫的schema再生成一層package,最終生成的類放在這個package下,默認爲false -->
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- 生成Mapper接口,注意,如果沒有配置該元素,那麼默認不會生成Mapper接口
targetPackage/targetProject:同javaModelGenerator
type:選擇怎麼生成mapper接口(在MyBatis3/MyBatis3Simple下):
1,ANNOTATEDMAPPER:會生成使用Mapper接口+Annotation的方式創建(SQL生成在annotation中),不會生成對應的XML;
2,MIXEDMAPPER:使用混合配置,會生成Mapper接口,並適當添加合適的Annotation,但是XML會生成在XML中;
3,XMLMAPPER:會生成Mapper接口,接口完全依賴XML;
注意,如果context是MyBatis3Simple:只支持ANNOTATEDMAPPER和XMLMAPPER
-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.lxc.mall.dao" targetProject="src/main/java">
<!-- 在targetPackage的基礎上,根據數據庫的schema再生成一層package,最終生成的類放在這個package下,默認爲false -->
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- tableName:數據表名字 domainObjectName:java類名 enable***ByExample:這些都是生成跟分頁有關的東西,我們不需要自動生成這些,把這4個屬性設置爲false-->
<table tableName="mall_shipping" domainObjectName="Shipping" enableCountByExample="false" enableDeleteByExample="false" enableSelectByExample="false" enableUpdateByExample="false">
<!--這個字段在數據庫中是text類型,我們必須爲它重新設置類型,才能使數據庫中字段都映射生成在一個pojo類中-->
<columnOverride column="detail" jdbcType="VARCHAR" />
</table>
</context>
</generatorConfiguration>
這裏只羅列了日常使用的配置,其實只要這些也足夠。詳細配置參考Mybatis Generator最完整配置詳解
使用命令執行插件
在項目根目錄下執行mvn mybatis-generator:generate
命令,這個命令可以在cmd中執行,也可以直接在IDEA的Terminal窗口中執行。