MyBatis Generator 詳細配置 demo
技術標籤:Java 學習工具篇Spring全家桶mybatisjavamaven
MyBatis Generator 詳細配置 demo
MyBatis Generator 是 MyBatis 提供的一個程式碼生成工具。可以幫我們生成 表對應的持久化物件(po)、操作資料庫的介面(dao)、CRUD sql的xml(mapper)。
MyBatis Generator 是一個獨立工具,你可以下載它的jar包來執行、也可以在 Ant 和 maven 執行。
目前已知的程式碼生成器有兩種: MyBatis-Plus 和 MyBatis Generator ;前者是後者的加強版,對於MyBatis-Plus的使用可以參見: MyBatis-Plus 3.4.1 程式碼生成器 配置demo
0、使用環境
- 開發工具:IDEA
- 資料庫:mysql
- 包管理工具:maven
1、配置 MyBatis Generator Config
MyBatis Generator 外掛啟動後,會根據你在 pom 中配置都路徑找到該配置檔案。
這個配置檔案才是詳細都配置 MyBatis Generator 生成程式碼的各種細節。
其中最重要的就是 context ,你的配置檔案至少得包含一個context
-
配置示例:
<?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">
2、使用MyBatis Generator
2.1 使用 Maven 外掛執行
pom.xml 新增配置
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<configuration>
<!--mybatis的程式碼生成器的配置檔案-->
<configurationFile>src/main/resources/mybatis-generator-config.xml</configurationFile>
<!--允許移動生成的檔案 -->
<verbose>true</verbose>
<!--允許覆蓋生成的檔案-->
<overwrite>true</overwrite>
<!--將當前pom的依賴項新增到生成器的類路徑中-->
<!--<includeCompileDependencies>true</includeCompileDependencies>-->
</configuration>
<executions>
<execution>
<id>Generate MyBatis Artifacts</id>
<phase>package</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<dependencies>
<!--mybatis-generator外掛的依賴包-->
<!--<dependency>-->
<!--<groupId>org.mybatis.generator</groupId>-->
<!--<artifactId>mybatis-generator-core</artifactId>-->
<!--<version>1.3.7</version>-->
<!--</dependency>-->
<!-- mysql的JDBC驅動 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
</dependencies>
</plugin>
</plugins>
<build>
配置好後,雙擊 maven 中的 MyBatis Generator 執行
2.1.1 引入 MyBatis Generator 外掛
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
</plugin>
<plugins>
</build>
2.1.2 配置 MyBatis Generator config 檔案路徑
MyBatis Generator 外掛需要根據一個 MyBatis Generator config 檔案,來具體執行
配置如下,版本我用的是目前最新的版本 1.3.7
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<configuration>
<!--mybatis的程式碼生成器的配置檔案-->
<configurationFile>src/main/resources/mybatis-generator-config.xml</configurationFile>
</configuration>
</plugin>
<plugins>
</build>
注意,這個路徑是你的配置檔案相對於該 pom 檔案的路徑
2.1.3 允許覆蓋生成的檔案
有時候我們的資料庫表添加了新欄位,需要重新生成對應的檔案。常規做法是手動刪除舊檔案,然後在用 MyBatis Generator 生成新檔案。當然你也可以選擇讓 MyBatis Generator 覆蓋舊檔案,省下手動刪除的步驟。
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<configuration>
<!--mybatis的程式碼生成器的配置檔案-->
<configurationFile>src/main/resources/mybatis-generator-config.xml</configurationFile>
<!--允許覆蓋生成的檔案-->
<overwrite>true</overwrite>
</configuration>
</plugin>
<plugins>
</build>
值得注意的是,MyBatis Generator 只會覆蓋舊的 po、dao、而 *mapper.xml 不會覆蓋,而是追加,這樣做的目的是防止使用者自己寫的 sql 語句一不小心都被 MyBatis Generator 給覆蓋了
- 問題解決
以前一直以為是MyBatis Generator生成的問題,直接刪除mapper.xml所在資料夾,重新生成就好了,現在提供一種MyBatis Generator官方提供的解決方法。
- 升級MyBatis Generator的版本
MyBatis Generator 在1.3.7版本提供瞭解決方案,我們目前使用的版本為1.3.3。
<!-- MyBatis 生成器 -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
- 在generatorConfig.xml檔案中新增覆蓋mapper.xml的外掛
<!--生成mapper.xml時覆蓋原檔案-->
<plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin" />
2.1.4 新增資料庫驅動依賴
MyBatis Generator 需要連結資料庫,肯定是需要對應資料庫驅動的依賴的。
如下,給 MyBatis Generator 新增資料庫驅動依賴
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<configuration>
<!--mybatis的程式碼生成器的配置檔案-->
<configurationFile>src/main/resources/mybatis-generator-config.xml</configurationFile>
<!--允許覆蓋生成的檔案-->
<overwrite>true</overwrite>
</configuration>
<dependencies>
<!-- mysql的JDBC驅動 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
</dependencies>
</plugin>
<plugins>
</build>
大部分情況下,我們的專案中已經配置過了對應資料庫的JDBC驅動。
現在在外掛中又配置一次,感覺有些冗餘,maven 提供了 includeCompileDependencies 屬性,讓我們在外掛中引用 dependencies 的依賴,這樣就不需要重複配置了。
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<configuration>
<!--mybatis的程式碼生成器的配置檔案-->
<configurationFile>src/main/resources/mybatis-generator-config.xml</configurationFile>
<!--允許覆蓋生成的檔案-->
<overwrite>true</overwrite>
<!--將當前pom的依賴項新增到生成器的類路徑中-->
<includeCompileDependencies>true</includeCompileDependencies>
</configuration>
</plugin>
<plugins>
</build>
2.1.5 新增其他依賴
一般配置了 includeCompileDependencies 後就不需要配置其他依賴了,因為 includeCompileDependencies 會將當前 pom 的 dependencies 中所以 Compile 期的依賴全部新增到生成器的類路徑中。
但有的人不想配置 includeCompileDependencies ,或者想在MyBatis Generator外掛中使用另一個版本的依賴,就可以配置 dependencies
2.2 Java 程式碼執行
package com.macro.mall.tiny.mbg;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
/**
* 用於生產MBG的程式碼
* Created by macro on 2018/4/26.
*/
public class Generator {
public static void main(String[] args) throws Exception {
//MBG 執行過程中的警告資訊
List<String> warnings = new ArrayList<String>();
//當生成的程式碼重複時,覆蓋原始碼
boolean overwrite = true;
//讀取我們的 MBG 配置檔案
InputStream is = Generator.class.getResourceAsStream("/generatorConfig.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(is);
is.close();
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
//建立 MBG
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
//執行生成程式碼
myBatisGenerator.generate(null);
//輸出警告資訊
for (String warning : warnings) {
System.out.println(warning);
}
}
}
3、自定義註釋生成器
package com.macro.mall.tiny.mbg;
import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.dom.java.Field;
import org.mybatis.generator.internal.DefaultCommentGenerator;
import org.mybatis.generator.internal.util.StringUtility;
import java.util.Properties;
/**
* 自定義註釋生成器
* Created by macro on 2018/4/26.
*/
public class CommentGenerator extends DefaultCommentGenerator {
private boolean addRemarkComments = false;
/**
* 設定使用者配置的引數
*/
@Override
public void addConfigurationProperties(Properties properties) {
super.addConfigurationProperties(properties);
this.addRemarkComments = StringUtility.isTrue(properties.getProperty("addRemarkComments"));
}
/**
* 給欄位添加註釋
*/
@Override
public void addFieldComment(Field field, IntrospectedTable introspectedTable,
IntrospectedColumn introspectedColumn) {
String remarks = introspectedColumn.getRemarks();
//根據引數和備註資訊判斷是否新增備註資訊
if (addRemarkComments && StringUtility.stringHasValue(remarks)) {
addFieldJavaDoc(field, remarks);
}
}
/**
* 給model的欄位添加註釋
*/
private void addFieldJavaDoc(Field field, String remarks) {
//文件註釋開始
field.addJavaDocLine("/**");
//獲取資料庫欄位的備註資訊
String[] remarkLines = remarks.split(System.getProperty("line.separator"));
for (String remarkLine : remarkLines) {
field.addJavaDocLine(" * " + remarkLine);
}
addJavadocTag(field, false);
field.addJavaDocLine(" */");
}
}