自动生成Mapper文件(基于Mybatis Maven插件)
自動(dòng)生成Mybatis的Mapper文件
工作中使用mybatis時(shí)我們需要根據(jù)數(shù)據(jù)表字段創(chuàng)建pojo類(lèi)、mapper文件以及dao類(lèi),并且需要配置它們之間的依賴(lài)關(guān)系,這樣的工作很瑣碎和重復(fù),mybatis官方也發(fā)現(xiàn)了這個(gè)問(wèn)題,因此給我們提供了mybatis generator工具來(lái)幫我們自動(dòng)創(chuàng)建pojo類(lèi)、mapper文件以及dao類(lèi)并且會(huì)幫我們配置好它們的依賴(lài)關(guān)系。
實(shí)際上,最非常流行MyBatis-Plus中內(nèi)置了代碼生成器:采用代碼或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 層代碼,支持模板引擎,有超多自定義配置等,在這主要介紹Mybatis的自動(dòng)生成步驟。
插件依賴(lài)
直接在maven的pom.xml文件中復(fù)制粘貼即可。
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.5</version><dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>6.0.6</version></dependency><dependency><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-core</artifactId><version>1.3.5</version></dependency></dependencies><configuration><!--允許移動(dòng)生成的文件 --><verbose>true</verbose><!-- 是否覆蓋 --><overwrite>true</overwrite><!-- 自動(dòng)生成的配置 --><configurationFile>src/main/resources/generatorConfig.xml</configurationFile></configuration></plugin></plugins> </build>BUG提醒:mysql-connector-java的版本問(wèn)題,如果你的驅(qū)動(dòng)是com.mysql.cj.jdbc.Driver,你就需要6.0.x的版本。如果是com.mysql.jdbc.Driver 則是5.1.x的版本。
注意
如果在工作中,你要使用Mybatis的反向工程生成文件,你應(yīng)該不能在項(xiàng)目pom.xml中引用上圖的依賴(lài),那么你可以專(zhuān)門(mén)創(chuàng)建一個(gè)sringboot工具項(xiàng)目來(lái)生成文件,然后在拖動(dòng)到你工作項(xiàng)目中。其實(shí)我們最需要的是Mapper文件中的restMap,如果你的數(shù)據(jù)庫(kù)字段有30 40 個(gè)之多,手動(dòng)Mapper文件絕對(duì)會(huì)讓你懷疑人生。
配置generatorConfig.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration><!--導(dǎo)入屬性配置--><!-- context 是逆向工程的主要配置信息 --><!-- id:name --><!-- targetRuntime:設(shè)置生成的文件適用于那個(gè) mybatis 版本 --><context id="default" targetRuntime="MyBatis3"><!-- 生成的 Java 文件的編碼 --><property name="javaFileEncoding" value="UTF-8"/><!-- optional,旨在創(chuàng)建class時(shí),對(duì)注釋進(jìn)行控制 --><commentGenerator><property name="suppressDate" value="true"/><property name="suppressAllComments" value="true"/></commentGenerator><!--jdbc的數(shù)據(jù)庫(kù)連接 --><jdbcConnectiondriverClass="com.mysql.cj.jdbc.Driver"connectionURL= 你數(shù)據(jù)庫(kù)urluserId= 賬號(hào)password= 你的密碼 ></jdbcConnection><!-- 非必需,類(lèi)型處理器,在數(shù)據(jù)庫(kù)類(lèi)型和java類(lèi)型之間的轉(zhuǎn)換控制--><javaTypeResolver><property name="forceBigDecimals" value="false"/></javaTypeResolver><!-- Model模型生成器,用來(lái)生成含有主鍵key的類(lèi),記錄類(lèi) 以及查詢(xún)Example類(lèi)targetPackage 指定生成的model生成所在的包名targetProject 指定在該項(xiàng)目下所在的路徑--><!--<javaModelGenerator targetPackage="com.mmall.pojo" targetProject=".\src\main\java">--><javaModelGenerator targetPackage="com.ke.likehouse.model" targetProject="./src/main/java"><!-- 是否允許子包,即targetPackage.schemaName.tableName --><property name="enableSubPackages" value="false"/><!-- 是否對(duì)model添加 構(gòu)造函數(shù),如果為true則不會(huì)生成ResultMap --><property name="constructorBased" value="false"/><!-- 是否對(duì)類(lèi)CHAR類(lèi)型的列的數(shù)據(jù)進(jìn)行trim操作 --><property name="trimStrings" value="true"/><!-- 建立的Model對(duì)象是否 不可改變 即生成的Model對(duì)象不會(huì)有 setter方法,只有構(gòu)造方法 --><property name="immutable" value="false"/></javaModelGenerator><!--mapper映射文件生成所在的目錄 為每一個(gè)數(shù)據(jù)庫(kù)的表生成對(duì)應(yīng)的SqlMap文件 --><!--<sqlMapGenerator targetPackage="mappers" targetProject=".\src\main\resources">--><sqlMapGenerator targetPackage="mybatis/mappers" targetProject="./src/main/resources"><property name="enableSubPackages" value="false"/></sqlMapGenerator><!-- 客戶(hù)端代碼,生成易于使用的針對(duì)Model對(duì)象和XML配置文件 的代碼type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper對(duì)象type="MIXEDMAPPER",生成基于注解的Java Model 和相應(yīng)的Mapper對(duì)象type="XMLMAPPER",生成SQLMap XML文件和獨(dú)立的Mapper接口--><!-- targetPackage:mapper接口dao生成的位置 --><!--<javaClientGenerator type="XMLMAPPER" targetPackage="com.mmall.dao" targetProject=".\src\main\java">--><javaClientGenerator type="XMLMAPPER" targetPackage="com.ke.likehouse.dao" targetProject="./src/main/java"><!-- enableSubPackages:是否讓schema作為包的后綴 --><property name="enableSubPackages" value="false" /></javaClientGenerator><!--生成的表--><!--domainObjectName:生成的domain類(lèi)的名字,如果不設(shè)置,直接使用表名作為domain類(lèi)的名字;可以設(shè)置為somepck.domainName,那么會(huì)自動(dòng)把domainName類(lèi)再放到somepck包里面;--><!--enableInsert(默認(rèn)true):指定是否生成insert語(yǔ)句;--><!--enableSelectByPrimaryKey(默認(rèn)true):指定是否生成按照主鍵查詢(xún)對(duì)象的語(yǔ)句(就是getById或get);--><!--enableSelectByExample(默認(rèn)true):MyBatis3Simple為false,指定是否生成動(dòng)態(tài)查詢(xún)語(yǔ)句;--><!--enableUpdateByPrimaryKey(默認(rèn)true):指定是否生成按照主鍵修改對(duì)象的語(yǔ)句(即update);--><!--enableDeleteByPrimaryKey(默認(rèn)true):指定是否生成按照主鍵刪除對(duì)象的語(yǔ)句(即delete);--><!--enableDeleteByExample(默認(rèn)true):MyBatis3Simple為false,指定是否生成動(dòng)態(tài)刪除語(yǔ)句;--><!--enableCountByExample(默認(rèn)true):MyBatis3Simple為false,指定是否生成動(dòng)態(tài)查詢(xún)總條數(shù)語(yǔ)句(用于分頁(yè)的總條數(shù)查詢(xún));--><!--enableUpdateByExample(默認(rèn)true):MyBatis3Simple為false,指定是否生成動(dòng)態(tài)修改語(yǔ)句(只修改對(duì)象中不為空的屬性);--><table tableName="agent" domainObjectName="Agent"enableCountByExample="false"enableUpdateByExample="false"enableDeleteByExample="false"enableSelectByExample="false"selectByExampleQueryId="false"></table><!-- geelynote mybatis插件的搭建 --></context> </generatorConfiguration>上圖的配置文件中包含了幾乎所有你可能用到的參數(shù)配置并帶有注釋,最終在IDEA中你看到項(xiàng)目結(jié)構(gòu)應(yīng)該是這樣的:
執(zhí)行maven命令
IDEA 的右方有MAVEN工具欄
方式一:通過(guò)IDEA的MAVEN工具執(zhí)行
方式二:通過(guò)MAVEN命令
配置命令:mybatis-generator:generate -e
然后Run就好了:
run成功后,你會(huì)在你配置的項(xiàng)目文件夾下看到生成好的代碼,然后基于此再做修改。
可能出現(xiàn)的BUG
如果你復(fù)制粘貼了代碼卻出現(xiàn)稀奇古怪的BUG,很有可能是:
如果你的驅(qū)動(dòng)是com.mysql.cj.jdbc.Driver,你就需要6.x.x的版本。如果是com.mysql.jdbc.Driver 則是5.x.x的版本。
轉(zhuǎn)載于:https://www.cnblogs.com/keeya/p/11247408.html
總結(jié)
以上是生活随笔為你收集整理的自动生成Mapper文件(基于Mybatis Maven插件)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [HDU] 5444.Elven Pos
- 下一篇: Programming asp.net笔