取代 Mybatis Generator,這款代碼生成神器配置更簡單,開發(fā)效率更高!
作為一名 Java 后端開發(fā),日常工作中免不了要生成數(shù)據(jù)庫表對應的持久化對象 PO,操作數(shù)據(jù)庫的接口 DAO,以及 CRUD 的 XML,也就是 mapper。
Mybatis Generator 是 MyBatis 官方提供的一個代碼生成工具,完全可以勝任這個工作,不過最近在開發(fā)“編程貓”開源網(wǎng)站的時候試用了一下 MyBatis-Plus 官方提供 ?AutoGenerator,發(fā)現(xiàn)配置更簡單,開發(fā)效率更高!于是就來給小伙伴們安利一波。
一、使用 Mybatis Generator
為了形成鮮明的對比,我們先來使用 Mybatis Generator 生成一次代碼,感受一下整個過程。
第一步,在 pom.xml 文件中添加 MySQL+MyBatis 的依賴(Mybatis Generator 的前置條件)。
????mysql
????mysql-connector-java
????${mysql.version}
????org.mybatis.spring.boot
????mybatis-spring-boot-starter
????2.2.2
添加完成后,一定要執(zhí)行一次 Maven 重載(見下圖),確保 MyBatis 的依賴加載完畢后再執(zhí)行第二步。

否則下一步可能不通過,但又得不到任何錯誤提示。不要問我為什么,踩過坑后痛苦的領悟。

添加完成后,可以通過 Maven 插件來生成代碼,也可以通過 Java 代碼來生成代碼,這里以 Maven 插件的形式來演示。Java 代碼的形式可參照 Mybatis Generator:
https://mybatis.org/generator/running/runningWithJava.html
第二步,在 pom.xml 的 MyBatis Generator 插件,先來看一下整體的結(jié)構(gòu)圖,注意是在 build→plugins 下節(jié)點下添加。

首先是 MyBatis Generator 插件,目前最新版是 1.4.0,我們采用上一個穩(wěn)定版本 1.3.7,穩(wěn)一點。
org.mybatis.generator
mybatis-generator-maven-plugin
1.3.7
只添加插件還不夠,還需要對其進行配置,我們使用 configurationFile 元素來指定一個配置文件 mybatis-generator-config.xml:
src/main/resources/mybatis-generator-config.xml

來看一下 mybatis-generator-config.xml 的內(nèi)容。
????"myContext"?targetRuntime="MyBatis3"?defaultModelType="flat">
????????
????????
????????????
????????????"suppressAllComments"?value="true"/>
????????
????????
????????"com.mysql.cj.jdbc.Driver"
????????????????????????connectionURL="jdbc:mysql://ip:3306/codingmoretiny02?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false"
????????????????????????userId="codingmoretiny02"
????????????????????????password="123456">
????????????
????????????"nullCatalogMeansCurrent"?value="true"/>
????????
????????
????????
????????????"forceBigDecimals"?value="true"/>
????????
????????
????????"com.codingmore.mbg.po"?targetProject="src/main/java">
????????????
????????????"trimStrings"?value="true"/>
????????
????????
????????"com.codingmore.mbg.mapper"?targetProject="src/main/resources">
????????
????????
????????"com.codingmore.mbg.dao"?targetProject="src/main/java"?type="XMLMAPPER">
????????
????????""?tableName="user"?domainObjectName="User"
???????????????enableCountByExample="false"?enableDeleteByExample="false"?enableSelectByExample="false"
???????????????enableUpdateByExample="false"?selectByExampleQueryId="false">
????????
????
配置文件至少得包含一個context commentGenerator 用來配置生成的注釋 jdbcConnection 用來鏈接數(shù)據(jù)庫 javaTypeResolver 配置 JDBC 與 Java 的類型轉(zhuǎn)換規(guī)則 javaModelGenerator 配置 po 生成的包路徑和項目路徑 sqlMapGenerator 配置 mapper.xml 文件生成的目錄 javaClientGenerator 配置 mapper.java 文件生成的目錄 一個 table 對應一張表,如果想同時生成多張表,需要配置多個 table
更多配置信息可以參照下面這篇文章:
https://juejin.cn/post/6844903982582743048
由于數(shù)據(jù)庫表可能會發(fā)生變動,因此我們需要追加一個配置 ,允許覆蓋舊的文件。為了防止我們編寫的 SQL 語句被覆蓋掉,MyBatis Generator 只會覆蓋舊的 po、dao、而 *mapper.xml 不會覆蓋,而是追加。
Mybatis Generator 需要鏈接數(shù)據(jù)庫,所以還需要添加數(shù)據(jù)庫驅(qū)動依賴,就像這樣:
????mysql
????mysql-connector-java
????${mysql.version}
這樣就會顯得比較冗余,因為我們之前添加過了。好在 Maven 提供了 includeCompileDependencies 屬性,可以讓我們在插件中引用之前添加的依賴。
true
到此為止,mybatis-generator-maven-plugin 就算是配置完成了,完整內(nèi)容如下所示:
????
????????
????????????org.mybatis.generator
????????????mybatis-generator-maven-plugin
????????????1.3.7
????????????
????????????????src/main/resources/mybatis-generator-config.xml
????????????????true true
????????????
????????
????
配置完成后可以雙擊運行 Maven 的插件 Mybatis Generator,沒有問題的話,可以看到生成后的文件。

二、使用 MyBatis-Plus 的 AutoGenerator
MyBatis-Plus(簡寫 MP)是 MyBatis 的增強工具,官方宣稱 MP 和 MyBatis 的關(guān)系就好像魂斗羅中的 1P 和 2P,可謂好基友,天下走。

AutoGenerator 是 MyBatis-Plus 推出的代碼生成器,可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各個模塊的代碼,比 Mybatis Generator 更強大,開發(fā)效率更高。
通過前面的體驗,想必大家確實感覺到了 Mybatis Generator 的繁瑣,接下來,我們來體驗一下 AutoGenerator,對比過后,大家心里就有答案了。
第一步,在 pom.xml 文件中添加 AutoGenerator 的依賴。
????com.baomidou
????mybatis-plus-generator
????3.4.1
第二步,添加模板引擎依賴,MyBatis-Plus 支持 Velocity(默認)、Freemarker、Beetl,這里使用默認的 Velocity 引擎。
????org.apache.velocity
????velocity-engine-core
????2.3
第三步,進行全局配置。
//?全局配置
GlobalConfig?gc?=?new?GlobalConfig();
String?projectPath?=?System.getProperty("user.dir");
gc.setOutputDir(projectPath?+?"/src/main/java");
gc.setAuthor("沉默王二");
gc.setOpen(false);
gc.setDateType(DateType.ONLY_DATE);
gc.setSwagger2(true);
gc.setIdType(IdType.AUTO);
第四步,配置數(shù)據(jù)源。
//?數(shù)據(jù)源配置
DataSourceConfig?dsc?=?new?DataSourceConfig();
dsc.setUrl("jdbc:mysql://ip:3306/codingmoretiny02?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("codingmoretiny02");
dsc.setPassword("123456");
第五步,配置包。
//?包配置
PackageConfig?pc?=?new?PackageConfig();
pc.setParent("top.codingmore.mpg");
更多配置項可以到官方查看:
https://baomidou.com/pages/061573/
示例代碼示例如下所示:
public?class?CodeGenerator?{
????public?static?void?main(String[]?args)?{
????????//?代碼生成器
????????AutoGenerator?mpg?=?new?AutoGenerator();
????????GlobalConfig?gc?=?new?GlobalConfig();
????????String?projectPath?=?System.getProperty("user.dir");
????????gc.setOutputDir(projectPath?+?"/src/main/java");
????????gc.setAuthor("沉默王二");
????????mpg.setGlobalConfig(gc);
????????DataSourceConfig?dsc?=?new?DataSourceConfig();
????????dsc.setDriverName("com.mysql.cj.jdbc.Driver");
????????mpg.setDataSource(dsc);
????????mpg.execute();
????}
}
再來看一下運行后的效果,可以看到數(shù)據(jù)庫表對應的 controller、service、entity、mapper 等等全有了——爽歪歪:

三、總結(jié)對比
對比 Mybatis 的 Generator 和 MyBatis-Plus 的 AutoGenerator,就可以得出這樣一條結(jié)論:后者的配置更簡單,開發(fā)效率也更高,功能也更強大——可快速生成 Mapper 、 Model 、 Service 、 Controller 層代碼。
MyBatis-Plus 的確配得上 Plus 啊,確實優(yōu)秀。

想要完整示例的話,可以到 GitHub 上查看:
https://github.com/itwanger/codingmore-learning/tree/main/codingmore-tiny-02
沒有什么使我停留——除了目的,縱然岸旁有玫瑰、有綠蔭、有寧靜的港灣,我是不系之舟。
推薦閱讀:
