自動生成實體類,哪個最佳?
看過松哥視頻的小伙伴都知道,我個人習慣用一個名叫 MyBatis Generator 的逆向工具,利用這個工具我們自動生成實體類和 mapper 接口以及對應(yīng)的 xml 文件,MyBatis Generator 是一個獨立工具,你可以下載它的 jar 包來運行、也可以在 Ant 或者 maven 中配置插件運行。
大家在公眾號后臺回復(fù) mybatis-gen 有這個工具的下載鏈接。
雖然我一直用這個工具,但是總感覺它太有年代感了,用久了有點膩。所以很多時候看到公眾號里有人推薦其他的 MyBatis 逆向工具,我也都會去試一試,特別是一些 IDEA 中的插件。
這些插件我目前裝了幾個開源免費的,不過都不怎么好用,而且?guī)缀醵加?BUG。不過這塊也有一些是付費的插件,付費的應(yīng)該會好用一些,不過我沒怎么試過,畢竟這并不是剛需。
去年我還自己開發(fā)了一個工具,手把手教大家完成一個自己的 MyBatis 逆向工具,還錄了一個配套視頻:
https://www.bilibili.com/video/BV1Vo4y1Z7af

項目地址:
https://github.com/lenve/generate_code
除了這些工具之外,我最近用的比較多的是一個 MyBatis-Plus 提供的,也是非常方便,如果你項目中用到了 MyBatis-Plus,那么這個工具還是特別好用的。
我給大家舉一個簡單例子。
首先我們創(chuàng)建一個 Spring Boot 工具,引入 Web、MyBatis、Freemarker 以及 MySQL 驅(qū)動,如下:

引入 Freemarker 是因為我們將來使用 Freemarker 做代碼模板,松哥之前自己開發(fā)的那個逆向工程,里邊使用的代碼模版就是 Freemarker。
項目創(chuàng)建成功之后,引入 MyBatis-Plus 相關(guān)依賴,一共是兩個:
<dependency>
????<groupId>com.baomidougroupId>
????<artifactId>mybatis-plus-generatorartifactId>
????<version>3.5.2version>
dependency>
<dependency>
????<groupId>com.baomidougroupId>
????<artifactId>mybatis-plus-boot-starterartifactId>
????<version>3.5.1version>
dependency>
一個是 MP 自己的依賴,還有一個是逆向工程的依賴。
接下來我們在 application.properties 中配置一下數(shù)據(jù)連接信息:
spring.datasource.url=jdbc:mysql:///vhr?serverTimezone=Asia/Shanghai&useSSL=false
spring.datasource.username=root
spring.datasource.password=123
mybatis-plus.configuration.map-underscore-to-camel-case=false
上面三行是數(shù)據(jù)庫連接的基本信息。最下面一行表示在 MP 將來查詢的時候,不要自動進行列名轉(zhuǎn)化。啥意思呢?比如我在 Book 類中有一個屬性名為 authorName,那么在 MP 去數(shù)據(jù)庫查詢的時候,會自動把 authorName 轉(zhuǎn)為 author_name,如果數(shù)據(jù)表在定義的時候剛好就是下劃線那么沒問題,但是如果數(shù)據(jù)表在定義的時候,不是下劃線,那么自動轉(zhuǎn)換之后就會出錯,現(xiàn)在加上上面這個最后一行配置,就沒問題了。
項目創(chuàng)建成功后,我們直接在單元測試中添加如下代碼,進行代碼生成:
FastAutoGenerator.create("jdbc:mysql:///vhr?serverTimezone=Asia/Shanghai&useSSL=false",?"root",?"123")
????????.globalConfig(builder?->?{
????????????builder.author("javaboy")?//?設(shè)置作者
????????????????????.disableOpenDir()
????????????????????.fileOverride()?//?覆蓋已生成文件
????????????????????.outputDir("src/main/java");?//?指定輸出目錄
????????})
????????.packageConfig(builder?->?{
????????????builder.parent("org.javaboy")?//?設(shè)置父包名
????????????????????.moduleName("mybatis_gen")?//?設(shè)置父包模塊名
????????????????????.pathInfo(Collections.singletonMap(OutputFile.xml,?"src/main/resources/mapper"));?//?設(shè)置mapperXml生成路徑
????????})
????????.strategyConfig(builder?->?{
????????????builder.addInclude("employee")?//?設(shè)置需要生成的表名
????????????????????.addTablePrefix("t_",?"c_");?//?設(shè)置過濾表前綴
????????})
????????.templateEngine(new?FreemarkerTemplateEngine())?//?使用Freemarker引擎模板,默認的是Velocity引擎模板
????????.execute();
上面的配置分了四塊:
globalConfig:這個是全劇配置,配置了生成的代碼注釋中的作者信息;默認情況下,代碼生成完畢后會自動打開生成的目錄,disableOpenDir 方法表示禁用這個功能;fileOverride 方法即將被移除,未來會不可用;最后的 outputDir 方法則是指定生成代碼的輸出目錄。 packageConfig:這個是配置生成的包信息,parent 方法用來設(shè)置父包名;moduleName 設(shè)置父包模塊名,這個參數(shù)的值加上 parent 的參數(shù)值,就是完整的包路徑;最后面則是指定了生成的 mapper.xml 文件的位置。 strategyConfig:這個是配置策略,對于我們來說,這里比較重要的就是配置需要逆向的表,將表名稱挨個列出來。 templteEngine:這個是配置模版引擎。
除了上面這些常規(guī)的配置外,如果你的需求比較特殊,也可以配置其他選項,具體的參考這個文檔:
https://baomidou.com/pages/981406/
配置完成后,執(zhí)行這段單元測試代碼,生成相關(guān)代碼,如下:

接下來,想做增刪改查,直接做即可,像下面這樣:
@RestController
public?class?EmployeeController?{
????@Autowired
????IEmployeeService?iEmployeeService;
????@GetMapping("/emps")
????public?List?getAllEmps()? {
????????List?list?=?iEmployeeService.list();
????????return?list;
????}
}
IEmployeeService 繼承自 IService,常規(guī)的增刪改查該有的都有。
最近感覺這個比較好用,我一直在用這個,感興趣的小伙伴不妨試試。
