mybatis-generator插件的使用[IDEA]
本文主要介紹在Maven項目中,如何利用mybatis-generator插件,用於自動生成MyBatis的Mapper和POJO。
文章目錄
一、新建項目
打開IDEA,新建Maven項目,不使用模板,然後項目命名爲mybatis-generator-demo,點擊Finish完成項目創建。
等待Maven導入依賴,項目如下:
二、添加插件
在pom.xml文件中添加如下插件信息:
<build>
<!--放在finalName標籤的下面-->
<plugins>
<!--mybatis-generator插件-->
<plugin>
<!--Mybatis-generator插件,用於自動生成Mapper和POJO-->
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<!--配置文件的位置 一定要改成配置文件的位置及名字-->
<configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
<executions>
<execution>
<id>Generate MyBatis Artifacts</id>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
之後,我們在Maven面板中插件一欄可以看到mybatis-generator:
三、創建mybatis generator配置文件
我們需要注意的是generatorConfig.xml文件的位置,在pom.xml文件中顯示配置文件的位置如下:
<configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
配置文件的內容如下,需要注意的點:
- 將id修改爲項目名
- 其他配置按需要修改
<?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">
<!-- mybatis generator文檔地址:http://mybatis.org/generator/index.html -->
<generatorConfiguration>
<!-- 數據庫配置文件地址 -->
<properties resource="db.properties"/>
<!-- 數據庫驅動地址 -->
<classPathEntry location="src/main/webapp/lib/mysql-connector-java-8.0.20.jar"/>
<!-- id爲項目名 -->
<context id="xxx" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressDate" value="true"/>
<!-- 是否去除自動生成的註釋 true:是 : false:否 -->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--數據庫鏈接URL,用戶名、密碼 -->
<jdbcConnection driverClass="${jdbc.driver}"
connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}">
</jdbcConnection>
<!-- 數據類型轉換 -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- 生成模型的包名和位置,按照項目實際情況修改 -->
<javaModelGenerator targetPackage="xmu.lee.domain"
targetProject="src/main/java">
<!-- enableSubPackages:是否讓schema作爲包的後綴 -->
<property name="enableSubPackages" value="true"/>
<!-- 從數據庫返回的值被清理前後的空格 -->
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- 生成XML映射文件的包名和位置,按照項目實際情況修改 -->
<sqlMapGenerator targetPackage="xmu.lee.mapper"
targetProject="src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- 生成DAO的包名和位置 ,按照項目實際情況修改-->
<javaClientGenerator type="XMLMAPPER"
targetPackage="xmu.lee.dao"
targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!-- 要生成哪些表,可以有多個table元素 -->
<!-- tableName:用於自動生成代碼的數據庫表;domainObjectName:對應於數據庫表的javaBean類名 -->
<table tableName="tab_article"
domainObjectName="Article">
<!-- 手動轉換數據庫Date爲java的LocalDate-->
<!-- column爲數據庫列名 ,property爲java數據類型-->
<columnOverride column="article_publish_date"
property="articlePublishDate"
jdbcType="DATE"
javaType="java.time.LocalDate"
typeHandler="org.apache.ibatis.type.LocalDateTypeHandler"></columnOverride>
</table>
</context>
</generatorConfiguration>
注意,默認情況下,mybatis generator會將數據庫DATE數據類型轉換爲java.time.Date類型,但由於Date類型不好用 ,所以我們要手動配置,將數據庫DATE數據類型轉換爲LocalDate類型。
在<table> </table>
中添加子元素<columnOveride>
:
<table tableName="tab_article"
domainObjectName="Article">
<!-- 手動轉換數據庫Date爲java的LocalDate-->
<!-- column爲數據庫列名 ,property爲java數據類型-->
<columnOverride column="article_publish_date"
property="articlePublishDate"
jdbcType="DATE"
javaType="java.time.LocalDate"
typeHandler="org.apache.ibatis.type.LocalDateTypeHandler"> </columnOverride>
</table>
- column爲數據庫列名
- property爲實體類的屬性名
- jdbcType爲數據庫字段數據類型,必須爲大寫
- javaType就是要轉換的實體屬性的數據類型
- typeHandler爲轉換引擎,注意不要寫錯了,將DATE轉換爲LocalDate就寫
LocalDateTypeHandler
四、創建數據庫配置文件
在src/main/resources
下創建數據庫配置文件db.properties
:
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai
jdbc.username=root
jdbc.password=123456
此處使用的數據庫版本是MySQL 8.0.20,所以數據庫驅動爲com.mysql.cj.jdbc.Driver
,並且在數據庫連接url後面需要加上時區。
五、引入數據庫驅動文件
因爲在generatorConfig.xml
文件中需要指定數據庫驅動文件位置lib/mysql-connector-java-8.0.20.jar
,所以我們需要在項目下新建lib
文件夾,然後將數據庫驅動放進該文件夾。
六、運行插件
在Maven面板中選擇該插件,右擊運行:
之後再項目結構中,能看到新生成的模型、映射配置文件等:
七、創建mybatis配置文件
mybatis generator插件只是幫助我們生成了一些枯燥的代碼,不用我們自己寫而已。如果要使用MyBatis,仍然需要MyBatis配置文件,在src/main/resources
下創建MyBatis配置文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="db.properties"></properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${database.driver}"/>
<property name="url" value="${database.url}"/>
<property name="username" value="${database.username}"/>
<property name="password" value="${database.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/test/mapper/PlayerMapper.xml"></mapper>
</mappers>
</configuration>
最主要的是設置映射配置文件的位置。
然後還要在pom.xml文件中加入數據庫驅動和mybatis依賴:
<dependencies>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
</dependencies>
八、總結
mybatis generator插件並不是爲了替代MyBatis,而是幫助我們自動生成模型代碼、映射配置文件、Mapper接口代碼,免除了繁瑣的持久層代碼編寫工作,所以在生成代碼之後,不要忘記創建MyBatis配置文件以及添加依賴。
最後整個項目結構如下(紅框中的是mybatis generator生成的,綠框的是自己需要創建的):