?
作為一名 Java 后端開發(fā),日常工作中免不了要生成數(shù)據(jù)庫表對應(yīng)的持久化對象 PO,操作數(shù)據(jù)庫的接口 DAO,以及 CRUD 的 XML,也就是 mapper。
Mybatis Generator 是 MyBatis 官方提供的一個代碼生成工具,完全可以勝任這個工作,不過最近在學(xué)習(xí)開發(fā)“編程喵??”開源網(wǎng)站的時候試用了一下 MyBatis-Plus 官方提供 AutoGenerator,發(fā)現(xiàn)配置更簡單,開發(fā)效率更高!于是就來給小伙伴們安利一波。
讓我們來通過一個 gif 感受一下 AutoGenerator 的強(qiáng)大。
1、導(dǎo)入 SQL 文件
編程喵使用的 MySQL 版本是 8.0,可以在鏈接上 MySQL 后使用 select version();
命令查詢版本。
打開 Navicat,把 SQL 文件導(dǎo)入到本地數(shù)據(jù)庫,
關(guān)閉鏈接,重新打開就可以看到導(dǎo)入后的數(shù)據(jù)庫 codingmore,里面一共 27 張表。
先體驗 Mybatis Generator
第一步,在 pom.xml 文件中添加 MySQL+MyBatis 的依賴(Mybatis Generator 的前置條件)。
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
添加完成后,一定要執(zhí)行一次 Maven 重載(見下圖),確保 MyBatis 的依賴加載完畢后再執(zhí)行第二步。
否則下一步可能不通過,但又得不到任何錯誤提示。不要問我為什么,踩過坑后痛苦的領(lǐng)悟。
添加完成后,可以通過 Maven 插件來生成骨架代碼,也可以通過 Java 代碼來生成骨架代碼,這里以 Maven 插件的形式來演示。Java 代碼的形式可參照 Mybatis Generator:
Java實現(xiàn)Generator
第二步,在 pom.xml 文件中,添加 MyBatis Generator 插件,注意是在 build→plugins 下節(jié)點(diǎn)下添加。
<!-- MyBatis Generator 插件 -->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<configuration>
<!-- MyBatis Generator 生成器的配置文件-->
<configurationFile>src/main/resources/mybatis-generator-config.xml</configurationFile>
<!-- 允許覆蓋生成的文件,確定骨架代碼后就可以設(shè)為 false 了,免得覆蓋原有代碼 -->
<overwrite>true</overwrite>
<!-- 將當(dāng)前 pom 的依賴項添加到生成器的類路徑中-->
<includeCompileDependencies>true</includeCompileDependencies>
</configuration>
</plugin>
MyBatis Generator 插件目前最新版是 1.4.0,我們采用上一個穩(wěn)定版本 1.3.7,新版本容易有坑。
來看一下添加 MyBatis Generator 插件后 pom.xml 文件的結(jié)構(gòu)圖。
只添加插件還不夠,還需要對其進(jìn)行配置,我們使用 configurationFile 元素來指定一個配置文件 mybatis-generator-config.xml:
<configurationFile>src/main/resources/mybatis-generator-config.xml</configurationFile>
由于數(shù)據(jù)庫表可能會發(fā)生變動,因此我們需要追加一個配置 <overwrite>true</overwrite>
,允許覆蓋舊的文件。為了防止我們編寫的 SQL 語句被覆蓋掉,MyBatis Generator 只會覆蓋舊的 po、dao、而 *mapper.xml 不會覆蓋,而是追加。
Mybatis Generator 需要連接數(shù)據(jù)庫,所以還需要在 plugin 節(jié)點(diǎn)中添加數(shù)據(jù)庫驅(qū)動依賴,就像這樣:
<configuration>
</configuration>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
但我們在 pom.xml 文件中已經(jīng)添加過 MySQL 的鏈接驅(qū)動了,這里再添加就會顯得很多余。好在 Maven 為我們提供了 includeCompileDependencies 屬性,可以讓我們在插件中引用之前添加的依賴。
<includeCompileDependencies>true</includeCompileDependencies>
來看一下 mybatis-generator-config.xml 的位置。
來看一下 mybatis-generator-config.xml 的內(nèi)容。
<generatorConfiguration>
<context id="myContext" targetRuntime="MyBatis3" defaultModelType="flat">
<!-- 注釋 -->
<commentGenerator>
<!-- 是否不生成注釋 -->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!-- jdbc連接 -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/codingmore?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false"
userId="root"
password="Huicheng123">
<!--高版本的 mysql-connector-java 需要設(shè)置 nullCatalogMeansCurrent=true-->
<property name="nullCatalogMeansCurrent" value="true"/>
</jdbcConnection>
<!-- 類型轉(zhuǎn)換 -->
<javaTypeResolver>
<!--是否使用bigDecimal,默認(rèn)false。
false,把JDBC DECIMAL 和 NUMERIC 類型解析為 Integer
true,把JDBC DECIMAL 和 NUMERIC 類型解析為java.math.BigDecimal-->
<property name="forceBigDecimals" value="true"/>
</javaTypeResolver>
<!-- 生成實體類地址 -->
<javaModelGenerator targetPackage="top.codingmore.mbg.po" targetProject="src/main/java">
<!-- 是否針對string類型的字段在set方法中進(jìn)行修剪,默認(rèn)false -->
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- 生成Mapper.xml文件 -->
<sqlMapGenerator targetPackage="top.codingmore.mbg.mapper" targetProject="src/main/resources">
</sqlMapGenerator>
<!-- 生成 XxxMapper.java 接口-->
<javaClientGenerator targetPackage="top.codingmore.mbg.dao" targetProject="src/main/java" type="XMLMAPPER">
</javaClientGenerator>
<!-- schema為數(shù)據(jù)庫名,oracle需要配置,mysql不需要配置。
tableName為對應(yīng)的數(shù)據(jù)庫表名
domainObjectName 是要生成的實體類名(可以不指定,默認(rèn)按帕斯卡命名法將表名轉(zhuǎn)換成類名)
enableXXXByExample 默認(rèn)為 true, 為 true 會生成一個對應(yīng)Example幫助類,幫助你進(jìn)行條件查詢,不想要可以設(shè)為false
-->
<table schema="" tableName="posts" domainObjectName="Posts"
enableCountByExample="false" enableDeleteByExample="false" enableSelectByExample="false"
enableUpdateByExample="false" selectByExampleQueryId="false">
</table>
</context>
</generatorConfiguration>
- 配置文件至少得包含一個context
- commentGenerator 用來配置生成的注釋
- jdbcConnection 用來鏈接數(shù)據(jù)庫
- javaTypeResolver 配置 JDBC 與 Java 的類型轉(zhuǎn)換規(guī)則
- javaModelGenerator 配置 po 生成的包路徑和項目路徑
- sqlMapGenerator 配置 mapper.xml 文件生成的目錄
- javaClientGenerator 配置 mapper.java 文件生成的目錄
- 一個 table 對應(yīng)一張表,如果想同時生成多張表,需要配置多個 table
更多配置信息可以參照下面這篇文章:
更多配置
到此為止,mybatis-generator-maven-plugin 就算是配置完成了,完整內(nèi)容如下圖所示:
配置完成后可以雙擊運(yùn)行 Maven 的插件 Mybatis Generator,沒有問題的話,可以看到生成后的文件。
再體驗 MyBatis-Plus 的 AutoGenerator
MyBatis-Plus(簡寫 MP)是 MyBatis 的增強(qiáng)工具,官方宣稱 MP 和 MyBatis 的關(guān)系就好像魂斗羅中的 1P 和 2P,可謂好基友,天下走。
AutoGenerator 是 MyBatis-Plus 推出的代碼生成器,可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各個模塊的代碼,比 Mybatis Generator 更強(qiáng)大,開發(fā)效率更高。
通過前面的體驗,想必大家確實感覺到了 Mybatis Generator 的繁瑣,接下來,我們來體驗一下 AutoGenerator,對比過后,大家心里就有答案了。
第一步,在 pom.xml 文件中添加 AutoGenerator 的依賴。
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.1</version>
</dependency>
第二步,添加模板引擎依賴,MyBatis-Plus 支持 Velocity(默認(rèn))、Freemarker、Beetl,這里使用 Velocity 引擎。
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
第三步,新建 CodeGenerator.java 文件,在 main 方法中添加 MyBatis-Plus 的 AutoGenerator 對象。
package top.codingmore.generator;
import com.baomidou.mybatisplus.generator.AutoGenerator;
/**
*
*/
public class CodeGenerator {
public static void main(String[] args) {
// 代碼生成器
AutoGenerator mpg = new AutoGenerator();
}
}
在 main 方法中添加全局配置。
// 全局配置
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);
gc.setBaseColumnList(true);
gc.setBaseResultMap(true);
gc.setFileOverride(true);
mpg.setGlobalConfig(gc);
配置數(shù)據(jù)源。
// 數(shù)據(jù)源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/codingmore?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("1qa");
mpg.setDataSource(dsc);
第五步,配置包。
// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent("top.codingmore.mpg");
更多配置項可以到官方查看:
https://baomidou.com/pages/061573/
完整代碼如下所示:
package top.codingmore.generator;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
/**
*/
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("小娃旺");
gc.setOpen(false);
gc.setDateType(DateType.ONLY_DATE);
gc.setSwagger2(true);
gc.setIdType(IdType.AUTO);
gc.setBaseColumnList(true);
gc.setBaseResultMap(true);
gc.setFileOverride(true);
mpg.setGlobalConfig(gc);
// 數(shù)據(jù)源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/codingmore?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("Huicheng123");
mpg.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent("top.codingmore.mpg");
mpg.setPackageInfo(pc);
mpg.execute();
}
}
再來看一下運(yùn)行后的效果,可以看到數(shù)據(jù)庫表對應(yīng)的 controller、service、entity、mapper 等等全有了——爽歪歪:
總結(jié)對比
對比 Mybatis 的 Generator 和 MyBatis-Plus 的 AutoGenerator,就可以得出這樣一條結(jié)論:后者的配置更簡單,開發(fā)效率也更高,功能也更強(qiáng)大——可快速生成 Mapper 、 Model 、 Service 、 Controller 層代碼。
MyBatis-Plus 的確配得上 Plus 啊,確實優(yōu)秀。文章來源:http://www.zghlxwxcb.cn/news/detail-822026.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-822026.html
到了這里,關(guān)于【無標(biāo)題】Spring Boot整合MyBatis-Plus,并通過AutoGenerator生成編程喵項目骨架代碼**的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!