idea 中使用Mybatis Generator逆向工程生成程式碼

殤灬央發表於2020-12-14

通過MAVEN完成 Mybatis 逆向工程

1. POM檔案中新增外掛

    在 pom 檔案的build 標籤中 新增 plugin 外掛和 資料庫連線 jdbc 的依賴。

<build>
    <plugins>
        <plugin>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-maven-plugin</artifactId>
            <version>1.4.0</version>
            <dependencies>
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>8.0.13</version>
                </dependency>
            </dependencies>
            <configuration>
                <!-- 輸出詳細資訊 -->
                <verbose>true</verbose>
                <!-- 覆蓋生成檔案 -->
                <overwrite>true</overwrite>
                <!-- 定義配置檔案 -->
                <configurationFile>${basedir}/src/main/resources/generatorConfig.xml</configurationFile>
            </configuration>
        </plugin>
    </plugins>
</build>

     若不在pom檔案中引入資料庫連線依賴,也可在配置檔案中通過本地方式啟動連線。

 

2. 在自己定義的位置上新增配置檔案 generatorConfig.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE generatorConfiguration
 3         PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
 4         "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
 5     <generatorConfiguration>
 6     <!-- 若想單獨配置屬性,可將其配入properties後 通過此方式匯入屬性 ${userId} -->
 7     <!--    <properties resource="generator.properties"></properties>-->
 8 
 9     <!-- 資料庫驅動:  若之前未在build裡配置資料庫驅動包,可選擇本地硬碟上面的資料庫驅動包-->
10     <classPathEntry  location="D:\Maven\repository\mysql\mysql-connector-java\5.1.38\mysql-connector-java-5.1.38.jar"/>
11 
12     <!-- targetRuntime 預設為MyBatis3DynamicSql,該值不會生成xml檔案, 可選擇Mybatis3 -->
13     <context id="default" targetRuntime="Mybatis3">
14       
15         <!-- optional,旨在建立class時,對註釋進行控制 -->
16         <commentGenerator>
17             <!-- 是否去除自動生成的註釋 true:是 : false:否 -->
18             <property name="suppressAllComments" value="true" />
19         </commentGenerator>
20 
21         <!-- 配置資料庫連線 -->
22         <jdbcConnection
23                 driverClass="com.mysql.jdbc.Driver"
24                 connectionURL="jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai"
25                 userId="root"
26                 password="123456">
27         </jdbcConnection>
28 
29         <!-- 非必需,型別處理器,在資料庫型別和java型別之間的轉換控制-->
30         <javaTypeResolver >
31             <property name="forceBigDecimals" value="false" />
32         </javaTypeResolver>
33 
34         <!-- Model模型生成器,用來生成含有主鍵key的類,記錄類 以及查詢Example類
35              targetPackage     指定生成的model生成所在的包名
36              targetProject     指定在該專案下所在的路徑
37         -->
38         <javaModelGenerator targetPackage="com.demo.dao.pojo" targetProject="src/main/java">
39             <!-- 是否允許子包,即targetPackage.schemaName.tableName -->
40             <property name="enableSubPackages" value="true"/>
41             <!-- 是否對model新增 建構函式 -->
42             <property name="constructorBased" value="false"/>
43             <!-- 是否對類CHAR型別的列的資料進行trim操作 -->
44             <property name="trimStrings" value="false"/>
45             <!-- 建立的Model物件是否 不可改變  即生成的Model物件不會有 setter方法,只有構造方法 -->
46             <property name="immutable" value="true"/>
47         </javaModelGenerator>
48 
49         <!-- 生成對映檔案的包名和位置-->
50         <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
51             <property name="enableSubPackages" value="false"/>
52         </sqlMapGenerator>
53 
54         <!-- 客戶端程式碼,生成易於使用的針對Model物件和XML配置檔案 的程式碼
55                 type="ANNOTATEDMAPPER",生成Java Model 和基於註解的Mapper物件
56                 type="MIXEDMAPPER",生成基於註解的Java Model 和相應的Mapper物件
57                 type="XMLMAPPER",生成SQLMap XML檔案和獨立的Mapper介面
58         -->
59         <javaClientGenerator targetPackage="com.demo.dao.mapper" targetProject="src/main/java" type="XMLMAPPER">
60             <property name="enableSubPackages" value="false"/>
61         </javaClientGenerator>
62         <table tableName="aging_demotion" domainObjectName="AgingDemotion"
63                enableCountByExample="false" enableUpdateByExample="false"
64                enableDeleteByExample="false" enableSelectByExample="false"
65                selectByExampleQueryId="false">
66           <!-- 插入時自動返回主鍵ID -->
67           <generatedKey column="aging_demotion_id" sqlStatement="Mysql" identity="true" />
68         </table>
69 
70         <table tableName="aging_listener" domainObjectName="AgingListener"
71                enableCountByExample="false" enableUpdateByExample="false"
72                enableDeleteByExample="false" enableSelectByExample="false"
73                selectByExampleQueryId="false">
74         </table>
75 
76         <table tableName="aging_state" domainObjectName="AgingState"
77                enableCountByExample="false" enableUpdateByExample="false"
78                enableDeleteByExample="false" enableSelectByExample="false"
79                selectByExampleQueryId="false">
80         </table>
81     </context>
82 </generatorConfiguration>

        XML配置資訊可參考mybatis官網:http://mybatis.org/generator/configreference/xmlconfig.html

 

3.通過maven啟動

 

        點選mybatis-generate:generate即可生成對應 java,mapper 和 pojo實體類。(若maven沒有顯示此外掛,可點選左上角重新整理)

 

4.Insert時返回自增主鍵。

        通過generatedKey 使其插入時返回ID,其值必須為數值型自增主鍵。

  其逆向生成的程式碼為:

<selectKey keyProperty="agingDemotionId" order="AFTER" resultType="java.lang.Long">
      SELECT LAST_INSERT_ID()
</selectKey>

        也可自己通過這種方式實現返回自增ID。

<insert id="insert" useGeneratedKeys="true" keyProperty="agingDemotionId"
            parameterType="com.jd.aging.presentation.domain.AgingDemotionEntity">

      這種方式只適用於傳入物件時,insert方法成功依舊返回的是 1, 不過傳入的實體類物件中 主鍵 ID 的值 不再為 null, 而是獲得該插入實體類的主鍵ID值。

 

 

 

如果有錯誤或者更優化的解決方案,歡迎大家在評論區留言探討。

也可以給我的個人公眾號私信留言。

 

相關文章