其實MyBatis Generator并不需要spring boot環(huán)境,只需要自己寫一個main方法運行即可铁材。本文主要介紹使用maven插件的方式。
注:本文采用的MyBatis Generator版本為:1.3.6
一、MyBatis Generator介紹
MyBatis Generator亩鬼,縮寫MBG,是一個Mybatis和iBatis的代碼生成器阿蝶。它支持Mybatis的所有版本雳锋,支持iBatis 2.2.0以后的版本。通過MyBatis Generator可以根據(jù)數(shù)據(jù)庫表生成相應(yīng)的實體羡洁、sql映射文件玷过、Dao等,能應(yīng)付簡單的CRUD(Create, Retrieve, Update, Delete),對于連接查詢或存儲過程等還是要手動編寫sql和對象辛蚊。
-
MyBatis Generator將生成以下內(nèi)容:
- 與表結(jié)構(gòu)匹配的Java POJO粤蝎。這可能包括:
- 一個關(guān)于表主鍵的類(如果表有主鍵)
- 一個關(guān)于表非主鍵字段的類(BLOB字段除外)
- 一個包含表BLOB字段的類(如果表有BLOB字段)
- 一個支持動態(tài)查詢、修改和刪除的類
-
MyBatis或iBATIS兼容的SQL映射XML文件袋马。MBG為配置中指定的每個表的簡單CRUD函數(shù)生成SQL诽里,生成的SQL語句包括:
-
插入
- 通過主鍵更新
- 通過動態(tài)where子句更新
- 通過主鍵刪除
- 通過動態(tài)where子句刪除
- 通過主鍵查詢
- 通過動態(tài)where子句查詢
- 通過動態(tài)where子句查詢條數(shù)
注意:上面的內(nèi)容并不一定全部生成,比如:如果表沒有主鍵飞蛹,則不會生成通過主鍵刪除等sql谤狡。
-
適合使用上述對象的Java類,Java類的生成是可選的卧檐。MBG將為MyBatis 3.X生成以下類型的Java類:
- 與MyBatis 3.x映射器基礎(chǔ)結(jié)構(gòu)配合使用的映射器接口
- MBG將為iBATIS 2.x生成以下類型的Java類:
- 符合Spring框架的DAO
- 只使用iBATIS SQL映射API的DAO墓懂。這些DAO可以通過兩種方式生成:通過構(gòu)造函數(shù)或setter注入來提供SqlMapClient。
- 符合iBATIS DAO框架的DAO(這是iBATIS的一個可選部分霉囚,此框架已被棄用捕仔,所以建議改用Spring框架)
在迭代開發(fā)過程中使用MyBatis Generator的注意事項:
-
如果存在與新生成的XML文件具有相同名稱的現(xiàn)有文件,MBG將自動合并XML文件盈罐,合并時榜跌,MBG不會覆蓋你在XML文件中添加的任何內(nèi)容。你可以重復(fù)生成而不用擔(dān)心丟失XML文件中你添加的內(nèi)容盅粪,MBG只替換通過MBG生成的任何XML元素钓葫。
MBG不會合并Java文件,它可以覆蓋現(xiàn)有文件或使用不同的唯一名稱保存新生成的文件(文件名后加1票顾、2础浮、3等序號)。如果重復(fù)生成可以選擇自動覆蓋替換或手動合并更改奠骄。
二豆同、引入MyBatis Generator的maven插件
在pom.xml里添加以下內(nèi)容:
<build>
<plugins>
<!--mybatis自動生成代碼插件-->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.6</version>
<configuration>
<!-- 是否覆蓋,true表示會替換生成的JAVA文件含鳞,false則不覆蓋 -->
<overwrite>true</overwrite>
</configuration>
<dependencies>
<!--mysql驅(qū)動包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
三影锈、最小的MyBatis Generator配置文件
MyBatis Generator為我們默認(rèn)好很多配置,我們只需要很少量的配置即可蝉绷,下面展示一下最小量的配置(只生成POJO)鸭廷。
既然要根據(jù)表來生成,所以肯定要連數(shù)據(jù)庫潜必,所以傳說中的四個參數(shù)必不可少靴姿,我們需要通過jdbcConnection來告訴MBG數(shù)據(jù)庫連接地址,另外表名也是必不可少的磁滚,MBG至少需要知道這兩個信息才能為我們干活。所以,最小的配置如下所示:
generatorConfig.xml內(nèi)容如下:
<?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">
<jdbcConnection
driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/springboot"
userId="root"
password="root"/>
<javaModelGenerator targetPackage="com.songguoliang.springboot.entity" targetProject="src/main/java"></javaModelGenerator>
<table tableName="tbl_user"></table>
</context>
</generatorConfiguration>
這里只生成POJO實體垂攘,并且放到com.songguoliang.springboot.entity包下维雇,運行maven插件:
可以看到,我們的實體已經(jīng)生成:
四晒他、MyBatis Generator常規(guī)配置
上面我們了解怎么用MyBatis Generator的maven插件來生成代碼吱型,上面只是生成了POJO,我們可能還想生成映射文件陨仅,dao接口文件等津滞,先把generatorConfig.xml配置文件復(fù)制備份為generatorConfig-min.xml。
修改后的配置文件內(nèi)容:
<?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>
<!-- defaultModelType="flat" 設(shè)置復(fù)合主鍵時不單獨為主鍵創(chuàng)建實體 -->
<context id="MySql" defaultModelType="flat">
<!-- 生成的POJO實現(xiàn)java.io.Serializable接口 -->
<plugin type="org.mybatis.generator.plugins.SerializablePlugin" />
<!--注釋-->
<commentGenerator>
<!-- 將數(shù)據(jù)庫中表的字段描述信息添加到注釋 -->
<property name="addRemarkComments" value="true"/>
<!-- 注釋里不添加日期 -->
<property name="suppressDate" value="true"/>
</commentGenerator>
<!-- 數(shù)據(jù)庫連接 -->
<jdbcConnection
driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/springboot"
userId="root"
password="root"/>
<!-- 生成POJO對象灼伤,并將類放到com.songguoliang.springboot.entity包下 -->
<javaModelGenerator targetPackage="com.songguoliang.springboot.entity" targetProject="src/main/java"></javaModelGenerator>
<!-- 生成mapper xml文件触徐,并放到resources下的mapper文件夾下 -->
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"></sqlMapGenerator>
<!-- 生成mapper xml對應(yīng)dao接口,放到com.songguoliang.springboot.mapper包下-->
<javaClientGenerator targetPackage="com.songguoliang.springboot.mapper" targetProject="src/main/java" type="XMLMAPPER"></javaClientGenerator>
<!-- table標(biāo)簽可以有多個狐赡,至少一個撞鹉,tableName指定表名,可以使用_和%通配符 -->
<table tableName="tbl_user">
<!-- 是否只生成POJO對象 -->
<property name="modelOnly" value="false"/>
<!-- 數(shù)據(jù)庫中表名有時我們都會帶個前綴颖侄,而實體又不想帶前綴鸟雏,這個配置可以把實體的前綴去掉 -->
<domainObjectRenamingRule searchString="^Tbl" replaceString=""/>
</table>
</context>
</generatorConfiguration>
重新運行MyBatis Generator的maven插件,生成如下內(nèi)容:
在實際項目中览祖,我們的數(shù)據(jù)庫連接已經(jīng)在配置文件里配置過了孝鹊,如果在generatorConfig.xml配置文件再配一次,比較麻煩展蒂,通郴淌遥可以直接引入數(shù)據(jù)庫的配置文件,如下:
application.properties內(nèi)容:
## 數(shù)據(jù)源配置
spring.datasource.url=jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
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>
<!-- 導(dǎo)入配置文件 -->
<properties resource="application.properties"/>
<!-- defaultModelType="flat" 設(shè)置復(fù)合主鍵時不單獨為主鍵創(chuàng)建實體 -->
<context id="MySql" defaultModelType="flat">
<!-- 生成的POJO實現(xiàn)java.io.Serializable接口 -->
<plugin type="org.mybatis.generator.plugins.SerializablePlugin" />
<!--注釋-->
<commentGenerator>
<!-- 將數(shù)據(jù)庫中表的字段描述信息添加到注釋 -->
<property name="addRemarkComments" value="true"/>
<!-- 注釋里不添加日期 -->
<property name="suppressDate" value="true"/>
</commentGenerator>
<!-- 數(shù)據(jù)庫連接玄货,直接通過${}讀取application.properties里的配置 -->
<jdbcConnection
driverClass="${spring.datasource.driver-class-name}"
connectionURL="${spring.datasource.url}"
userId="${spring.datasource.username}"
password="${spring.datasource.password}"/>
<!-- 生成POJO對象皇钞,并將類放到com.songguoliang.springboot.entity包下 -->
<javaModelGenerator targetPackage="com.songguoliang.springboot.entity" targetProject="src/main/java"></javaModelGenerator>
<!-- 生成mapper xml文件,并放到resources下的mapper文件夾下 -->
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"></sqlMapGenerator>
<!-- 生成mapper xml對應(yīng)dao接口松捉,放到com.songguoliang.springboot.mapper包下-->
<javaClientGenerator targetPackage="com.songguoliang.springboot.mapper" targetProject="src/main/java" type="XMLMAPPER"></javaClientGenerator>
<!-- table標(biāo)簽可以有多個夹界,至少一個,tableName指定表名隘世,可以使用_和%通配符 -->
<table tableName="tbl_user">
<!-- 是否只生成POJO對象 -->
<property name="modelOnly" value="false"/>
<!-- 數(shù)據(jù)庫中表名有時我們都會帶個前綴可柿,而實體又不想帶前綴,這個配置可以把實體的前綴去掉 -->
<domainObjectRenamingRule searchString="^Tbl" replaceString=""/>
</table>
</context>
</generatorConfiguration>