通過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>
3.通過maven啟動
點選mybatis-generate:generate即可生成對應 java,mapper 和 pojo實體類。(若maven沒有顯示此外掛,可點選左上角重新整理)
通過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值。
如果有錯誤或者更優化的解決方案,歡迎大家在評論區留言探討。
也可以給我的個人公眾號私信留言。