Mybatis Generator逆向工程的使用詳細(xì)教程
一、MyBatis Generator簡介
MyBatis Generator(MBG)是MyBatis和iBATIS的代碼生成器。它將為所有版本的MyBatis以及版本2.2.0之后的iBATIS版本生成代碼。它將審查數(shù)據(jù)庫表(或許多表),并將生成可用于訪問表的構(gòu)件。這減少了設(shè)置對象和配置文件以與數(shù)據(jù)庫表交互的初始麻煩。MBG尋求對簡單CRUD(創(chuàng)建,檢索,更新,刪除)的大部分?jǐn)?shù)據(jù)庫操作產(chǎn)生重大影響。您仍然需要為連接查詢或存儲過程手動編寫SQL和對象代碼。MyBatis Generator將生成:
與表結(jié)構(gòu)匹配的Java POJO。這可能包括:
- 一個(gè)匹配表的主鍵的類(如果有主鍵)
- 一個(gè)匹配表的非主鍵字段的類(BLOB字段除外)
- 包含表的BLOB字段的類(如果表具有BLOB字段)
- 用于啟用動態(tài)選擇,更新和刪除的類
這些類之間存在適當(dāng)?shù)睦^承關(guān)系。請注意,生成器可以配置為生成不同類型的POJO層次結(jié)構(gòu) - 例如,如果您愿意,可以選擇為每個(gè)表生成單個(gè)域?qū)ο蟆?/p>
MyBatis/iBATIS兼容的SQL Map XML文件。MBG為配置中的每個(gè)表上的簡單CRUD函數(shù)生成SQL。生成的SQL語句包括:
- insert 插入
- update by primary key 按主鍵更新
- update by example (using a dynamic where clause) 通過條件更新(使用動態(tài)where子句)
- delete by primary key 按主鍵刪除
- delete by example (using a dynamic where clause) 按條件刪除(使用動態(tài)where子句)
- select by primary key 按主鍵查詢
- select by example (using a dynamic where clause) 按條件查詢(使用動態(tài)where子句)
- count by example 按條件查詢記錄總數(shù)
根據(jù)表結(jié)構(gòu)的不同,這些語句有不同的變體(例如,如果表沒有主鍵,則MBG不會通過主鍵功能生成更新)。
適當(dāng)使用上述對象的Java客戶端類。Java客戶端類的生成是可選的。MBG將為MyBatis 3.x生成以下類型的Java客戶端:
適用于MyBatis 3.x映射器基礎(chǔ)結(jié)構(gòu)的映射器接口
MBG將為iBATIS 2.x生成以下類型的Java客戶端:
- 符合Spring框架的DAO
- 僅使用iBATIS SQL映射API的DAO。這些DAO可以生成兩種:通過構(gòu)造函數(shù)或setter注入提供SqlMapClient。
- 符合iBATIS DAO框架的DAO(iBATIS的可選部分,現(xiàn)在不推薦使用此框架,我們建議您使用Spring框架)
MyBatis生成器設(shè)計(jì)為在迭代開發(fā)環(huán)境中運(yùn)行良好,并且可以作為Ant任務(wù)或Maven插件包含在連續(xù)構(gòu)建環(huán)境中。迭代運(yùn)行MBG時(shí)需要注意的重要事項(xiàng)包括:
如果存在與新生成的XML文件同名的現(xiàn)有文件,MBG將自動合并XML文件。MBG不會覆蓋您對其生成的XML文件所做的任何自定義更改。您可以反復(fù)運(yùn)行它,而不必?fù)?dān)心會丟失對XML的自定義更改。MBG將替換先前運(yùn)行中生成的任何XML元素。
MBG不會合并Java文件,它可以覆蓋現(xiàn)有文件或使用不同的唯一名稱保存新生成的文件。如果對生成的Java文件進(jìn)行更改并以迭代方式運(yùn)行MBG,則必須手動合并更改。當(dāng)作為Eclipse插件運(yùn)行時(shí) ,MBG可以自動合并Java文件。
二、MyBatis Generator使用
1、新建MBG的配置文件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> <!--導(dǎo)入屬性配置--> <properties resource="generator.properties"></properties> <!--指定特定數(shù)據(jù)庫的jdbc驅(qū)動jar包的位置--> <!--<classPathEntry location="${jdbc.driverLocation}"/>--> <context id="default" targetRuntime="MyBatis3"> <!-- optional,旨在創(chuàng)建class時(shí),對注釋進(jìn)行控制,false生成注釋,true無注釋 --> <commentGenerator> <property name="suppressDate" value="false"/> <property name="suppressAllComments" value="false"/> </commentGenerator> <!--jdbc的數(shù)據(jù)庫連接 --> <jdbcConnection driverClass="${jdbc.driverClass}" connectionURL="${jdbc.connectionURL}" userId="${jdbc.userId}" password="${jdbc.password}"> </jdbcConnection> <!-- 默認(rèn)false,把JDBC DECIMAL 和 NUMERIC 類型解析為 Integer, 為 true時(shí)把JDBC DECIMAL 和 NUMERIC 類型解析為java.math.BigDecimal --> <!-- 非必需,類型處理器,在數(shù)據(jù)庫類型和java類型之間的轉(zhuǎn)換控制--> <javaTypeResolver> <property name="forceBigDecimals" value="false"/> </javaTypeResolver> <!-- Model模型生成器,用來生成含有主鍵key的類,記錄類 以及查詢Example類 targetPackage 指定生成的model生成所在的包名 targetProject 指定在該項(xiàng)目下所在的路徑|指定生成到的工程名稱 --> <javaModelGenerator targetPackage="com.test.model" targetProject=".\src\main\java"> <!-- 是否允許子包,即targetPackage.schemaName.tableName --> <property name="enableSubPackages" value="false"/> <!-- 是否對model添加 構(gòu)造函數(shù) true添加,false不添加--> <property name="constructorBased" value="false"/> <!-- 是否對類CHAR類型的列的數(shù)據(jù)進(jìn)行trim操作 --> <property name="trimStrings" value="true"/> <!-- 建立的Model對象是否 不可改變 即生成的Model對象不會有 setter方法,只有構(gòu)造方法 --> <property name="immutable" value="false"/> </javaModelGenerator> <!--Mapper映射文件生成所在的目錄 為每一個(gè)數(shù)據(jù)庫的表生成對應(yīng)的SqlMapper文件 --> <sqlMapGenerator targetPackage="com.test.mapper" targetProject=".\src\main\java"> <property name="enableSubPackages" value="false"/> </sqlMapGenerator> <!-- 客戶端代碼,生成易于使用的針對Model對象和XML配置文件 的代碼 type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper對象 type="MIXEDMAPPER",生成基于注解的Java Model 和相應(yīng)的Mapper對象 type="XMLMAPPER",生成SQLMapper XML文件和獨(dú)立的Mapper接口 --> <javaClientGenerator targetPackage="com.test.mapper" targetProject=".\src\main\java" type="XMLMAPPER"> <property name="enableSubPackages" value="true"/> </javaClientGenerator> <!--需要映射的數(shù)據(jù)庫的表名--> <table tableName="t_userinfo" domainObjectName="UserInfo" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"> </table> </context> </generatorConfiguration>
2、新建generator.properties文件
jdbc.driverLocation=C:\\mysql-connector-java-5.1.43.jar jdbc.driverClass=com.mysql.jdbc.Driver jdbc.connectionURL=jdbc:mysql://localhost:3306/mybatis jdbc.userId=root jdbc.password=tiger
3、配置執(zhí)行mybatis generator操作,這里有兩種方式
第1種方式:
如果使用maven項(xiàng)目就可以省去編寫Java啟動類,使用maven插件和配置文件pom.xml即可,插件啟動maven-generator,在pom.xml中添加maven-generator插件
<plugins> <!--myBatis逆向工程插件--> <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>${project.basedir}/src/main/resources/generatorConfig.xml</configurationFile> </configuration> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.35</version> </dependency> </dependencies> </plugin> </plugins>
點(diǎn)擊mybatis-generator:generate就能執(zhí)行mybatis generator了
第2種方式:
1、如果不是maven項(xiàng)目添加該mybatis-generator-core-1.3.2.jar,編寫main方法指向mybatis逆向工程,我給依賴粘貼到下面了
<!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core --> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.2</version> </dependency>
2、修改generatorConfig.xml文件,放開注釋的該配置
<classPathEntry location="${jdbc.driverLocation}"/>
3、然后編寫測試類執(zhí)行
/** * 如果不是maven項(xiàng)目可以這樣生成 */ public class MybatisGeneratorTest { public static void main(String[] args) throws InterruptedException, SQLException, IOException, InvalidConfigurationException, XMLParserException { List<String> warnings = new ArrayList<String>(); //生成的java文件是否覆蓋 boolean overwrite = true; //指定逆向工程配置文件 //File configFile = new File("E:\\project\\mybatis-generator\\src\\main\\resources\\generatorConfig.xml"); InputStream resourceAsStream = MybatisGeneratorTest.class.getClassLoader().getResourceAsStream("generatorConfig.xml"); ConfigurationParser cp = new ConfigurationParser(warnings); Configuration config = cp.parseConfiguration(resourceAsStream); DefaultShellCallback callback = new DefaultShellCallback(overwrite); MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,callback, warnings); myBatisGenerator.generate(null); } }
介紹完這兩種方式,查看數(shù)據(jù)表:
查看生成的實(shí)體類:
TIP:可以看出如果實(shí)體類想要遵循駝峰命名規(guī)范,數(shù)據(jù)庫表字段名設(shè)計(jì)需要用"_"來劃分
查看生成的文件信息:
TIP1:必須在<plugin></plugin>標(biāo)簽里添加數(shù)據(jù)庫驅(qū)動,在其他地方添加無效,如果不添加會報(bào)找不到驅(qū)動錯(cuò)誤,如過不在該插件添加數(shù)據(jù)庫依賴的話可以使用 <classPathEntry location="${jdbc.driverLocation}"/> 來指定數(shù)據(jù)庫驅(qū)動位置。
TIP2:如果你在使用mybatis generator插件執(zhí)行的時(shí)候報(bào)[ERROR] Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.2:generate (default-cli) on project mybatis-generator: <properties> resource generator.properties does not exist -> [Help 1]
盡管你的 <properties resource="generator.properties"></properties>配置的沒有問題,但是還是找不到generator.properties,查看該配置,注釋掉
該配置會改變generatorConfig.xml中讀取generator.properties文件的默認(rèn)路徑
TIP3:Mybatis Generator反向工程默認(rèn)不會覆蓋生成的*.java文件。也可以設(shè)置覆蓋生成的*.java文件,在反向工程插件mybatis-generator-maven-plugin添加該配置<overwrite>true</overwrite>則會覆蓋生成的*.java文件,如圖
Mybatis Generator不會覆蓋你的mapper.xml文件,MBG會合并追加到mapper.xml和你自定義的存在一起,但是如果你修改MBG第一次默認(rèn)生成的SQL(MBG生成的CRUD),MBG會重新把自己生成的CRUD恢復(fù)默認(rèn),說白了,MBG只會覆蓋他自己生成的SQL,不會覆蓋你自定義的,你自定義的不變。。。如圖,他不會動你的自定義SQL,只會覆蓋Mybatis反向工程自己生成的SQL,前提MBG自動生成SQL語句的注釋要存在。
在最常見的用例中,MyBatis Generator(MBG)由XML配置文件驅(qū)動。配置文件告訴MBG
- 如何連接到數(shù)據(jù)庫
- 生成什么對象,以及如何生成它們
- 應(yīng)使用哪些表生成對象
官方MBG配置文件詳解地址:http://mybatis.org/generator/configreference/xmlconfig.html
附帶一個(gè)MBG的中文配置文件詳解:https://www.jianshu.com/p/e09d2370b796
更多Mybatis逆向工程的使用參考:http://www.mybatis.org/generator/index.html
總結(jié)
到此這篇關(guān)于Mybatis Generator逆向工程的使用詳細(xì)教程的文章就介紹到這了,更多相關(guān)Mybatis Generator逆向工程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解springmvc之json數(shù)據(jù)交互controller方法返回值為簡單類型
這篇文章主要介紹了springmvc之json數(shù)據(jù)交互controller方法返回值為簡單類型,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-05-05利用Java正則表達(dá)式校驗(yàn)郵箱與手機(jī)號
利用Java正則表達(dá)式校驗(yàn)郵箱與手機(jī)號。需要的朋友可以過來參考下,希望對大家有所幫助2013-10-10Java中LocalCache本地緩存實(shí)現(xiàn)代碼
本篇文章主要介紹了Java中LocalCache本地緩存實(shí)現(xiàn)代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05淺談Java包裝類型Long的==操作引發(fā)的低級bug
本文主要介紹了淺談Java包裝類型Long的==操作引發(fā)的低級bug,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08JDBC中Statement和Preparement的使用講解
今天小編就為大家分享一篇關(guān)于JDBC中Statement和Preparement的使用講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-01-01