簡介
在學(xué)習(xí)公司項目時看到公司有使用Mybatis-Generator,所以學(xué)習(xí)了一下
之前是有見識過Mybatis-Plus的generator,使用起來還是很棒的,再說了Mybatis-Plus不也是基于Mybatis做的嗎,所以相信他們會很相似
再有就是學(xué)習(xí)項目時用過renren-generator,他能生成項目中簡單的業(yè)務(wù)代碼,包括controller、service等等
內(nèi)容
關(guān)于Mybatis-Generator最好還是去官網(wǎng)學(xué)習(xí),http://mybatis.org/generator/index.html
當然有些博客寫的也很棒,https://www.cnblogs.com/throwable/p/12046848.html
關(guān)于上面的那篇博客我只糾正一點,就是關(guān)于commentGenerator標簽這塊suppressAllComments,默認值是false沒錯,但是false含義是生成注釋,設(shè)置為true才表示不生成注解。
代碼
下面是我的一些代碼,可以參考一下
主要是pom.xml、generatorConfig.xml、generatorConfig.properties
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.wnh</groupId>
<artifactId>mybatis-generator</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<spring.boot.version>2.2.2.RELEASE</spring.boot.version>
<mysql.driver.version>8.0.17</mysql.driver.version>
<mybatis.generator.version>1.4.0</mybatis.generator.version>
<lombok.version>1.18.12</lombok.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${spring.boot.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.driver.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>${mybatis.generator.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>${spring.boot.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 通過mvn mybatis-generator:generate命令,運行mybatis-generator -->
<!-- 參考:https://mybatis.org/generator/running/runningWithMaven.html -->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>${mybatis.generator.version}</version>
<executions>
<execution>
<id>Generate MyBatis Artifacts</id>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- 定義配置文件 -->
<configurationFile>${basedir}/src/main/resources/mybatis/generatorConfig.xml</configurationFile>
<!-- 輸出詳細信息 -->
<verbose>true</verbose>
<!-- 覆蓋生成文件 -->
<overwrite>true</overwrite>
<!-- 這里許多配置可以放在對應(yīng)的xml文件中 -->
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.driver.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
generatorConfig.properties
datasource.driver=com.mysql.cj.jdbc.Driver
datasource.url=jdbc:mysql://localhost:3306/operation?useSSL=false
datasource.username=root
datasource.password=root
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>
<!-- 引入配置文件 -->
<properties resource="mybatis/generatorConfig.properties"/>
<!-- 要添加到類路徑的 JAR/ZIP 文件的完整路徑名,或要添加到類路徑的目錄 -->
<!-- 需要驅(qū)動:1、加入驅(qū)動路徑 2、在plugin里直接加入依賴 -->
<!-- <classPathEntry location="/Program Files/IBM/SQLLIB/java/db2java.zip"/>-->
<!-- targetRuntime屬性推薦MyBatis3和MyBatis3Simple -->
<!-- 必須按context的順序配置 -->
<context id="MySQL" targetRuntime="MyBatis3Simple">
<!-- 插件擴展生成類,例如:生成toString,實現(xiàn)java.io.Serializable等 -->
<!-- http://mybatis.org/generator/reference/plugins.html https://github.com/itfsw/mybatis-generator-plugin -->
<!-- <plugin type="com.itfsw.mybatis.generator.plugins.LombokPlugin">-->
<!-- <!– @Data 默認開啟,同時插件會對子類自動附加@EqualsAndHashCode(callSuper = true),@ToString(callSuper = true) –>-->
<!-- <property name="@Data" value="true"/>-->
<!-- <!– @Builder 必須在 Lombok 版本 >= 1.18.2 的情況下開啟,對存在繼承關(guān)系的類自動替換成@SuperBuilder –>-->
<!-- <property name="@Builder" value="false"/>-->
<!-- <!– @NoArgsConstructor 和 @AllArgsConstructor 使用規(guī)則和Lombok一致 –>-->
<!-- <property name="@AllArgsConstructor" value="false"/>-->
<!-- <property name="@NoArgsConstructor" value="false"/>-->
<!-- <!– @Getter、@Setter、@Accessors 等使用規(guī)則參見官方文檔 –>-->
<!-- <property name="@Accessors(chain = true)" value="false"/>-->
<!-- <!– 臨時解決IDEA工具對@SuperBuilder的不支持問題,開啟后(默認未開啟)插件在遇到@SuperBuilder注解時會調(diào)用ModelBuilderPlugin來生成相應(yīng)的builder代碼 –>-->
<!-- <property name="supportSuperBuilderForIdea" value="false"/>-->
<!-- </plugin>-->
<!--覆蓋生成XML文件-->
<plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin" />
<commentGenerator>
<property name="suppressAllComments" value="true"/>
<!-- 是否輸出表和列的comment信息 -->
<property name="addRemarkComments" value="true"/>
</commentGenerator>
<!-- 數(shù)據(jù)源連接信息 -->
<jdbcConnection
driverClass="${datasource.driver}"
connectionURL="${datasource.url}"
userId="${datasource.username}"
password="${datasource.password}">
</jdbcConnection>
<javaTypeResolver>
<!-- 如果為true,所有數(shù)字屬性被強制使用BigDecimal類型表示 -->
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- 生成模型的包名和位置 -->
<javaModelGenerator
targetPackage="com.wnh.pojo.model"
targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaModelGenerator>
<!-- 生成的映射文件包名和位置 -->
<sqlMapGenerator
targetPackage="mybatis/mapper"
targetProject="src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- 生成DAO的包名和位置 -->
<javaClientGenerator
targetPackage="com.wnh.mapper"
targetProject="src/main/java"
type="XMLMAPPER">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!-- <table tableName="school_area"-->
<!-- domainObjectName="SchoolArea"-->
<!-- enableCountByExample="false"-->
<!-- enableSelectByExample="false"-->
<!-- enableUpdateByExample="false"-->
<!-- enableDeleteByExample="false">-->
<!-- <generatedKey column="id" sqlStatement="JDBC" identity="true"/>-->
<!-- </table>-->
<table tableName="user"
domainObjectName="user.User"
mapperName="user.UserMapper"
enableCountByExample="false"
enableSelectByExample="false"
enableUpdateByExample="false"
enableDeleteByExample="false">
<generatedKey column="id" sqlStatement="JDBC" identity="true"/>
</table>
</context>
</generatorConfiguration>
注意事項
- 雖然有
Java和maven兩種啟動方式,但我還是推薦maven - 關(guān)于
pom,要在plugin中引入需要的依賴,上面也提到了可以配置插件幫助我們生成代碼,但官方提供的插件都太基礎(chǔ)了,不太實用 - 關(guān)于
generatorConfig.xml,這里context標簽里的要嚴格按照順序配置,否則報錯 - 一定注意上面的覆蓋
xml的plugin配置,不然在覆蓋生成時會有問題
吐槽
- 首先就是關(guān)于注釋的,
Mybatis-Generator生成注釋配置下,會生成很多多余的注解,其主要就是關(guān)于聲明這里的代碼是我們Mybatis-Generator生成的,但真的沒什么用啊。有人就問了,“你不會把它關(guān)掉嗎?”我要不是為了生成實體類對應(yīng)數(shù)據(jù)庫的注釋我也不會開 - 關(guān)于生成表這塊,難道沒有直接配置多個表的選項嗎?非得對應(yīng)數(shù)據(jù)庫每個表寫一個
table標簽嗎? - 還有就是在生成文件時,它不會自己確定父包,也就是還得配置每個文件的父包,很麻煩
總結(jié)
說實話Mybatis-Generator確實能幫助我們簡化開發(fā),生成數(shù)據(jù)庫實體類、mapper接口和xml,但是確實也存在一些問題,這也可能是因為它不更新了吧,上maven倉庫就可以看到最新版本就是1.4.0,停留在2019年,現(xiàn)在確實也存在很多能替代它的方案。