??
一、MyBatis Generator簡介
MyBatis Generator(MBG)是MyBatis和iBATIS的代碼生成器,它將為所有版本的MyBatis以及版本2.2.0之后的iBATIS版本生成代碼,它將審查資料庫表(或許多表),并將生成可用于訪問表的構件,這減少了設定物件和組態檔以與資料庫表互動的初始麻煩,MBG尋求對簡單CRUD(創建,檢索,更新,洗掉)的大部分資料庫操作產生重大影響,您仍然需要為連接查詢或存盤程序手動撰寫SQL和物件代碼,MyBatis Generator將生成:
-
與表結構匹配的Java POJO,這可能包括:
-
一個匹配表的主鍵的類(如果有主鍵)
-
一個匹配表的非主鍵欄位的類(BLOB欄位除外)
-
包含表的BLOB欄位的類(如果表具有BLOB欄位)
-
用于啟用動態選擇,更新和洗掉的類
這些類之間存在適當的繼承關系,請注意,生成器可以配置為生成不同型別的POJO層次結構 - 例如,如果您愿意,可以選擇為每個表生成單個域物件,
-
MyBatis/iBATIS兼容的SQL Map XML檔案,MBG為配置中的每個表上的簡單CRUD函式生成SQL,生成的SQL陳述句包括:
-
insert 插入
-
update by primary key 按主鍵更新
-
update by example (using a dynamic where clause) 通過條件更新(使用動態where子句)
-
delete by primary key 按主鍵洗掉
-
delete by example (using a dynamic where clause) 按條件洗掉(使用動態where子句)
-
select by primary key 按主鍵查詢
-
select by example (using a dynamic where clause) 按條件查詢(使用動態where子句)
-
count by example 按條件查詢記錄總數
根據表結構的不同,這些陳述句有不同的變體(例如,如果表沒有主鍵,則MBG不會通過主鍵功能生成更新),
-
適當使用上述物件的Java客戶端類,Java客戶端類的生成是可選的,MBG將為MyBatis 3.x生成以下型別的Java客戶端:
-
適用于MyBatis 3.x映射器基礎結構的映射器介面
MBG將為iBATIS 2.x生成以下型別的Java客戶端:
-
符合Spring框架的DAO
-
僅使用iBATIS SQL映射API的DAO,這些DAO可以生成兩種:通過建構式或setter注入提供SqlMapClient,
-
符合iBATIS DAO框架的DAO(iBATIS的可選部分,現在不推薦使用此框架,我們建議您使用Spring框架)
MyBatis生成器設計為在迭代開發環境中運行良好,并且可以作為Ant任務或Maven插件包含在連續構建環境中,迭代運行MBG時需要注意的重要事項包括:
-
如果存在與新生成的XML檔案同名的現有檔案,MBG將自動合并XML檔案,MBG不會覆寫您對其生成的XML檔案所做的任何自定義更改,您可以反復運行它,而不必擔心會丟失對XML的自定義更改,MBG將替換先前運行中生成的任何XML元素,
-
MBG不會合并Java檔案,它可以覆寫現有檔案或使用不同的唯一名稱保存新生成的檔案,如果對生成的Java檔案進行更改并以迭代方式運行MBG,則必須手動合并更改,當作為Eclipse插件運行時 ,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> <!--匯入屬性配置--> <properties resource="generator.properties"></properties> <!--指定特定資料庫的jdbc驅動jar包的位置--> <!--<classPathEntry location="${jdbc.driverLocation}"/>--> <context id="default" targetRuntime="MyBatis3"> <!-- optional,旨在創建class時,對注釋進行控制,false生成注釋,true無注釋 --> <commentGenerator> <property name="suppressDate" value="false"/> <property name="suppressAllComments" value="false"/> </commentGenerator> <!--jdbc的資料庫連接 --> <jdbcConnection driverClass="${jdbc.driverClass}" connectionURL="${jdbc.connectionURL}" userId="${jdbc.userId}" password="${jdbc.password}"> </jdbcConnection> <!-- 默認false,把JDBC DECIMAL 和 NUMERIC 型別決議為 Integer, 為 true時把JDBC DECIMAL 和 NUMERIC 型別決議為java.math.BigDecimal --> <!-- 非必需,型別處理器,在資料庫型別和java型別之間的轉換控制--> <javaTypeResolver> <property name="forceBigDecimals" value="false"/> </javaTypeResolver> <!-- Model模型生成器,用來生成含有主鍵key的類,記錄類 以及查詢Example類 targetPackage 指定生成的model生成所在的包名 targetProject 指定在該專案下所在的路徑|指定生成到的工程名稱 --> <javaModelGenerator targetPackage="com.test.model" targetProject=".\src\main\java"> <!-- 是否允許子包,即targetPackage.schemaName.tableName --> <property name="enableSubPackages" value="false"/> <!-- 是否對model添加 建構式 true添加,false不添加--> <property name="constructorBased" value="false"/> <!-- 是否對類CHAR型別的列的資料進行trim操作 --> <property name="trimStrings" value="true"/> <!-- 建立的Model物件是否 不可改變 即生成的Model物件不會有 setter方法,只有構造方法 --> <property name="immutable" value="false"/> </javaModelGenerator> <!--Mapper映射檔案生成所在的目錄 為每一個資料庫的表生成對應的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 和相應的Mapper物件 type="XMLMAPPER",生成SQLMapper XML檔案和獨立的Mapper介面 --> <javaClientGenerator targetPackage="com.test.mapper" targetProject=".\src\main\java" type="XMLMAPPER"> <property name="enableSubPackages" value="true"/> </javaClientGenerator> <!--需要映射的資料庫的表名--> <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、配置執行mybatis generator操作,這里有兩種方式
第1種方式:如果使用maven專案就可以省去撰寫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>
點擊mybatis-generator:generate就能執行mybatis generator了
第2種方式:
1、如果不是maven專案添加該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、然后撰寫測驗類執行
/** * 如果不是maven專案可以這樣生成 */ 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); } }
介紹完這兩種方式,查看資料表:
?
查看生成的物體類:
?
TIP:可以看出如果物體類想要遵循駝峰命名規范,資料庫表欄位名設計需要用"_"來劃分
查看生成的檔案資訊:
?
TIP1:必須在<plugin></plugin>標簽里添加資料庫驅動,在其他地方添加無效,如果不添加會報找不到驅動錯誤,如過不在該插件添加資料庫依賴的話可以使用 <classPathEntry location="${jdbc.driverLocation}"/> 來指定資料庫驅動位置,
TIP2:如果你在使用mybatis generator插件執行的時候報[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檔案的默認路徑
TIP3:Mybatis Generator反向工程默認不會覆寫生成的*.java檔案,也可以設定覆寫生成的*.java檔案,在反向工程插件mybatis-generator-maven-plugin添加該配置<overwrite>true</overwrite>則會覆寫生成的*.java檔案,如圖
?
Mybatis Generator不會覆寫你的mapper.xml檔案,MBG會合并追加到mapper.xml和你自定義的存在一起,但是如果你修改MBG第一次默認生成的SQL(MBG生成的CRUD),MBG會重新把自己生成的CRUD恢復默認,說白了,MBG只會覆寫他自己生成的SQL,不會覆寫你自定義的,你自定義的不變,,,如圖,他不會動你的自定義SQL,只會覆寫Mybatis反向工程自己生成的SQL,前提MBG自動生成SQL陳述句的注釋要存在,
?
在最常見的用例中,MyBatis Generator(MBG)由XML組態檔驅動,組態檔告訴MBG
-
如何連接到資料庫
-
生成什么物件,以及如何生成它們
-
應使用哪些表生成物件
官方MBG組態檔詳解地址:http://mybatis.org/generator/configreference/xmlconfig.html
附帶一個MBG的中文組態檔詳解:https://www.jianshu.com/p/e09d2370b796
更多Mybatis逆向工程的使用參考:http://www.mybatis.org/generator/index.html
?
● XStream學習手冊
● 別在 Java 代碼里亂打日志了,這才是正確的打日志姿勢!
● 高可用Redis服務架構分析與搭建
● 8 種方案,幫你解決重復提交問題!請拿走
● IDEA 解決 Maven 依賴沖突的高能神器,這一篇夠不夠?
?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/160759.html
標籤:Java
