介紹
MyBatis Generator的作用就是根據數據庫中的表結構,幫我們自動生成和表結構相同的實體類,mapper接口,包含基本增刪改查語句的XML文件,我以一個例子演示如何優雅的使用MyBatis Generator,我會把例子放在GitHub上,所以不用擔心配置看不全的問題。
造數據,新建一個Spring Boot項目
建一個學生表,插入四條數據
建一個Spring Boot項目
配置maven插件,增加配置文件,運行插件
配置maven插件
<build>
<plugins>
<plugin>
<groupid>org.mybatis.generator/<groupid>
<artifactid>mybatis-generator-maven-plugin/<artifactid>
<version>1.3.7/<version>
<configuration>
<verbose>true/<verbose>
<overwrite>true/<overwrite>
/<configuration>
/<plugin>
/<plugins>
/<build>
在resources目錄下放配置文件,我這裡放了2個文件,datasource.properties和generatorConfig.xml,其中datasource.properties中放了一個數據庫的配置,如用戶名和密碼之類的,generatorConfig.xml引用datasource.properties其中的配置,剩下的文件夾和類都是配置好後,運行插件自動生成的
運行插件的方法如下,點擊紅框部分即可
MyBatis Generator的運行方法有很多種,maven插件的方法最方便,因此不再介紹其他方法
生成的Student類和數據庫中的字段一樣,而StudentExample類是為了方便增刪改查而生成的,我演示一下用法,其實很雞肋,一般不用這個
@Repository
public interface StudentMapper {
// 生成的一部分,沒有全部列出來
long countByExample(StudentExample example);
int deleteByExample(StudentExample example);
int deleteByPrimaryKey(Integer id);
int insert(Student record);
int insertSelective(Student record);
}
演示
我建一個測試類,來演示用法,IDEA中按住Ctrl+Shift後再按T鍵,自動生成一個測試類
,選中要測試的方法即可自動生成測試類,我就演示一下countByExample這個方法吧
查詢id>=1並且id<4的學生的數量,測試通過
可以看到SQL的邏輯用Java代碼表示了,不容易維護。所以一般是配置不生成Example類
在generatorConfig.xml配置文件中配置項設為false即可,完整版看GitHub,這裡省略了一部分配置
<table>/<table>
這樣生成的Mapper文件中就只包含最基礎的增刪改查,沒有這些亂七八糟的Example了
下面就是修改後生成的全部內容,是不是看著清爽多了
public interface StudentMapper {
int deleteByPrimaryKey(Integer id);
int insert(Student record);
int insertSelective(Student record);
Student selectByPrimaryKey(Integer id);
int updateByPrimaryKeySelective(Student record);
int updateByPrimaryKey(Student record);
}
如何定義Java類型和數據庫類型的映射關係
還是上面的例子,我生成的Student對象如下
public class Student {
private Integer id;
private String name;
private Byte gender;
private LocalDateTime createTime;
}
數據庫中的datetime被映射為LocalDateTime 類型(用起來比較方便),這是我配置的原因。默認的是、datetime被映射為Date類型
在generatorConfig.xml有2種配置的方式
第一種,這個是全局的,針對所有表
<javatyperesolver>
<property>
/<javatyperesolver>
第二種,這個只針對表中某一列
<table><columnoverride>
/<table>
這兩種方式還可以定義其他類型的映射方式,我就不再介紹了。知道方法查詢具體配置就行
後記
話說剛開始用MyBatis Generator的坑還是挺多的,要不就是在低版本的插件中,這個配置不起作用
<javatyperesolver>
<property>
/<javatyperesolver>
要不就是在最新的插件中,重新生成時,雖然配置了每次覆蓋XML文件,但是不會起作用(這個一般都會配置,假如是追加的方式,會造成運行2次插件,一個接口在XML中對應2個語句,導致啟動錯誤),還得配置作者為解決這個問題專門寫的插件,為了大家少走彎路,我寫了一個demo,各種配置寫的很詳細。基本上改改配置就能用,坑我都替大家填了,關注微信公眾號
Java識堂,回覆配置即可獲得GitHub地址,歡迎star。閱讀更多 Java識堂 的文章