不要再手寫實體類和Mapper了,使用MyBatis程式碼生成工具一鍵生成!
技術標籤:mybatis資料庫javamybatismysql
目錄
MyBatis程式碼生成工具
在我們使用MyBatis的過程中,我們往往需要編寫實體類和單表CRUD程式碼,在表不多的時候,可能還好,但是一但表多了,那將會是一件相當麻煩的事情。幸運的是,MyBatis官方程式碼生成器(MyBatis Generator)可以幫助我們解決這個問題,MyBatis Generator(簡稱MBG)可以通過資料庫表直接生成實體類、單表CRUD程式碼、mapper.xml檔案。下面我們就來看一下如何使用MyBatis Generator。
使用MyBatis Generator
1、新增依賴
使用MBG,主要是以下兩個依賴,一個是mybatis的spring boot依賴和MyBatis Generator的依賴。如果你只是單純想用 MyBatis程式碼生成器,那麼甚至可以不用mybatis-spring-boot-starter依賴
<!--SpringBoot整合MyBatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId> mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
<!-- MyBatis 生成器 -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
< version>1.4.0</version>
</dependency>
<!--Mysql資料庫驅動-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
2、添加了依賴,我們就需要進行相關的配置
在application.yml中對資料來源和MyBatis的mapper.xml檔案路徑進行配置
#資料庫連線
spring.datasource.url=jdbc:mysql://192.168.91.128:3306/mytest?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#指定本地mapper.xml檔案的存放位置
mybatis.mapper-locations=classpath:dao/*.xml
3、在啟動類新增@MapperScan註解,指定掃描的路徑
路徑只要是包含你Mapper介面的路徑都可以,範圍越小,效率越高
@MapperScan("com.example.demo2")
public class Demo2Application {
public static void main(String[] args) {
SpringApplication.run(Demo2Application.class, args);
}
}
4、上面就配置好了mybatis,然後我們就可以在resources目錄下編寫程式碼生成器的xml配置檔案
下面是我編寫的一個程式碼生成器xml檔案
名稱為: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>
<!--
context:程式碼生成規則配置的上下文
id:標識
targetRuntime: MyBatis3Simple 只會生成基本的CRUD操作
-->
<context id="DB2Tables" targetRuntime="MyBatis3Simple">
<!--commentGenerator:註釋生成策略-->
<commentGenerator>
<!--suppressAllComments:是否阻止註釋生成-->
<property name="suppressAllComments" value="true"/>
<!--suppressDate:是否阻止時間戳生成-->
<property name="suppressDate" value="true"/>
</commentGenerator>
<!--jdbcConnection:資料庫的連結屬性-->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mytest?useUnicode=true&characterEncoding=utf8"
userId="root"
password="root">
<!--解決mysql驅動升級到8.0後不生成指定資料庫程式碼的問題-->
<property name="nullCatalogMeansCurrent" value="true" />
</jdbcConnection>
<!--javaTypeResolver:java型別轉換策略-->
<javaTypeResolver >
<!-- forceBigDecimals
false:如果資料庫中的欄位型別為numeric或者decimal,在程式碼生成的時候根據資料庫中設定的長度自動選擇java型別進行轉換
true:直接使用java.math.BigDecimal型別-->
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!--domain生成策略;targetPackage:生成到哪個包下面,targetProject:生成到哪個專案目錄下面-->
<javaModelGenerator targetPackage="com.example.childdemo.model" targetProject="src/main/java">
<!--<property name="enableSubPackages" value="true" />-->
<!--表示是否修剪字串(去掉空格-->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!--sqlMapGenerator:對映檔案生成策略
targetPackage:生成到哪個包下面,targetProject:生成到哪個專案目錄下面
-->
<sqlMapGenerator targetPackage="com.example.childdemo.mapper" targetProject="src/main/resources">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!--mapper介面生成策略
type:ANNOTATEDMAPPER:註解的形式
XMLMAPPER:xml對映的形式-->
<javaClientGenerator type="ANNOTATEDMAPPER" targetPackage="com.example.childdemo.mapper" targetProject="src/main/java">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!--指定要生成程式碼的表
domainObjectName:設定表對應的domain實體類生成的名稱
-->
<table tableName="productdir" domainObjectName="ProductDir"></table>
</context>
</generatorConfiguration>`
5、執行程式碼生成器
下面我們通過編碼和配置檔案執行程式碼生成器
編寫好配置檔案之後,我們就可以寫個類用於生成程式碼,直接執行main方法即可生成所有程式碼,程式碼如下:
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);
}
}
}
執行main方法,就會幫我們生成相應的實體類和mapper介面了
Maven外掛執行程式碼生成器
除了上面的方法,我們還可以通過Maven外掛執行程式碼生成器
如果使用Maven外掛,那麼不需要引入mybatis-generator-core依賴,只需要引入一個Maven的外掛mybatis-generator-maven-plugin即可,在pom檔案新增以下plugin:
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<!-- 輸出詳細資訊 -->
<verbose>true</verbose>
<!-- 覆蓋生成檔案 -->
<overwrite>true</overwrite>
<!-- 定義配置檔案 -->
<configurationFile>${basedir}/src/main/resources/generator-configuration.xml</configurationFile>
</configuration>
<executions>
<execution>
<id>MyBatis Generate</id>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
</dependencies>
</plugin>
外掛配置完畢之後,使用下面的命令即可執行:
mvn mybatis-generator:generate
注意:外掛的版本要與連線資料庫的版本對應,否則會報錯
我們也可以在編譯器的maven選項直接執行,如下
執行後就可以得到相應的程式碼了,如下