仍是以爲看書學習有意思~嘿嘿。今天把mybatis給結束掉。 html
--WZYjava
1、什麼是逆向工程?mysql
簡單點說,就是經過數據庫中的單表,自動生成java代碼。spring
Mybatis官方提供了逆向工程,能夠針對單表自動生成mybatis代碼(mapper.java\mapper.xml\po類)sql
企業中,逆向工程是個很經常使用的工具,以前咱們就學習了hibernate的逆向工程,比咱們手動建立映射文件的配置信息方便不少,數據庫
2、下載逆向工程mybatis
jar包下載 oracle
3、建立java工程app
此步驟截圖略,dom
4、添加jar包
逆向工程jar包,mybatis-generator-core-1.3.2.jar,每一個人版本不同,這裏不必定就徹底相同
數據庫驅動包,使用的是mysql
5、建立核心代碼
點擊進入jar包的docs目錄下找到index.html來查詢複製核心代碼。
點擊index.html進入
給出核心代碼方便往後直接複製
List<String> warnings = new ArrayList<String>(); boolean overwrite = true; File configFile = new File("generatorConfig.xml"); ConfigurationParser cp = new ConfigurationParser(warnings); Configuration config = cp.parseConfiguration(configFile); DefaultShellCallback callback = new DefaultShellCallback(overwrite); MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings); myBatisGenerator.generate(null);
6、建立generatorConfig.xml配置文件
根據上面的核心代碼,仔細看一下不難發現,其運行須要加載一個generatorConfig.xml配置文件,在index.html中也有該配置文件的模版。
這個也比較清楚,下面有什麼不懂的都有作出解釋,可是咱們不這樣直接複製,我給出一份好的,有註釋的,往後直接複製改點數據便可
在我上面框出來的地方就是須要修改的地方,根據本身的實際狀況來進行修改,而且這裏的配置文件是將數據庫中的user、orders、orderdetail、items這四張表進行逆向,配置文件中須要指定須要逆向生成的表的名稱
<?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> <context id="testTables" targetRuntime="MyBatis3"> <commentGenerator> <!-- 是否去除自動生成的註釋 true:是 : false:否 --> <property name="suppressAllComments" value="true" /> </commentGenerator> <!--數據庫鏈接的信息:驅動類、鏈接地址、用戶名、密碼 --> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/test" userId="root" password="root"> </jdbcConnection> <!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver" connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:yycg" userId="yycg" password="yycg"> </jdbcConnection> --> <!-- 默認false,把JDBC DECIMAL 和 NUMERIC 類型解析爲 Integer,爲 true時把JDBC DECIMAL 和 NUMERIC 類型解析爲java.math.BigDecimal --> <javaTypeResolver> <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <!-- targetProject:生成PO類的位置 --> <javaModelGenerator targetPackage="com.wuhao.mt.domain" targetProject=".\src"> <!-- enableSubPackages:是否讓schema做爲包的後綴 --> <property name="enableSubPackages" value="false" /> <!-- 從數據庫返回的值被清理先後的空格 --> <property name="trimStrings" value="true" /> </javaModelGenerator> <!-- targetProject:mapper映射文件生成的位置 --> <sqlMapGenerator targetPackage="com.wuhao.mt.mapper" targetProject=".\src"> <!-- enableSubPackages:是否讓schema做爲包的後綴 --> <property name="enableSubPackages" value="false" /> </sqlMapGenerator> <!-- targetPackage:mapper接口生成的位置 --> <javaClientGenerator type="XMLMAPPER" targetPackage="com.wuhao.mt.mapper" targetProject=".\src"> <!-- enableSubPackages:是否讓schema做爲包的後綴 --> <property name="enableSubPackages" value="false" /> </javaClientGenerator> <!-- 指定數據庫表 --> <table tableName="user"></table> <table tableName="orders"></table> <table tableName="orderdetail"></table> <table tableName="items"></table> </context> </generatorConfiguration>
注意核心代碼中加載generatorConfig.xml的配置文件的位置須要寫正確,根據你本身的存放位置進行相應的修改,並非固定的。
7、目錄結構
完成核心代碼和其配置文件以後的工程就成這樣了,而後直接運行核心代碼就會自動幫咱們從數據庫中指定的表生成mybatis的mapper類。
運行Generator.java
這裏須要注意一個問題,點擊運行以後,就已經幫咱們生成好了對應的類,可是咱們須要手動刷新項目纔看得見,有些人就會以爲看不見,覺得沒有生效,而後又第二次運行核心代碼,這裏就會出現一個很嚴重的問題,[Mapper.xml文件已經存在時,若是進行從新生成則mapper.xml文件時,內容不被覆蓋而是進行內容追加,結果致使mybatis解析失敗]
解決辦法:刪除生成的全部類和mapper.xml,從新在運行一遍便可。
生成以後的目錄
其餘都不用說,說兩個地方
第一:mapper接口報錯了,這裏不用管,報的錯的緣由是缺乏mybatis核心的jar包,和mapper接口中卻用到了這些類,因此就會報錯,
解決:加入所須要jar包錯誤消失,可是咱們不會這樣作,由於這個項目就是用來生成mapper相關類的,加入jar包沒什麼用,畫蛇添足,咱們須要用的時候將其加入咱們開發時的項目中,就不會在報錯了。
第二:生成的持久化對象中,多了一個xxxExample.java類,這個類是用來[構造複雜的篩選條件],通俗點講就是[專門用來封裝自定義查詢條件],等會會介紹他的使用方法。
8、測試
將咱們逆向工程所生成的mapper相關的類和接口等東西都加入到咱們開發的項目中來,進來實驗,這裏就不過多陳述了,不會的話,就看前幾章節的mybatis的構建和使用
目錄
這裏咱們將Items相關的類,都加入到與spring集成的項目中去,框起來的就是咱們從逆向工程中獲取到的。注意,逆向工程就是使用mapper方式進行開發,而不是dao方式
測試,OrderMapperTest.java
//問題描述:查詢出Items中name中有"記"字的記錄,模糊查詢,使用查詢條件(xxxExample) //獲取applicationContext.xml配置並加載 ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); //獲取ItemsMapper代碼對象 ItemsMapper im = (ItemsMapper) ac.getBean("itemsMapper"); //封裝查詢條件的對象在該類(ItemsExample)中,因此先構造該對象 ItemsExample ie = new ItemsExample(); //經過ItemsExample的對象獲取封裝查詢條件的對象Criteria Criteria c = ie.createCriteria(); //構建查詢條件,這裏使用方法將其內部實現封裝了,其實作的事情就是在 //sql語句的where後面加入: and name like "%記%" c.andNameLike("%記%"); //經過im將查詢條件傳送進去。 List<Items> list = im.selectByExample(ie); //查詢出name爲筆記本這條記錄 System.out.println(list.get(0).getName());
9、總結
這裏就將mybatis的逆向工程給講完了,一點都不難,一步步實現下去便可,關鍵是後的多的那個xxxExample類可能你們有一點不理解,下一篇文章會將其講解清楚,詳細介紹一下這個類。這一節就學會如何建立逆向工程便可。