本文以Spring整合MyBatis環境下,介紹MyBatis逆向工程自動生成pojo,mapper,dao的Java類。MyBatis的一個主要的特色就是須要程序員本身編寫sql,那麼若是表太多的話,不免會很麻煩,因此mybatis官方提供了一個逆向工程,能夠針對單表自動生成mybatis執行所須要的代碼,通常在開發中,經常使用的逆向工程方式是經過數據庫的表生成代碼。下圖爲逆向工程依賴的jar包。
mybatis-generator-core-1.3.6.jar爲逆向工程的核心包java
mysql-connector-java-8.0.9-rc.jar爲鏈接數據庫所需驅動mysql
mybatis-3.4.6.jar爲mybatis框架依賴的jar包,到這裏就足夠了,這裏能夠添加日誌文件,由於不是必須的因此就省略了,咱們只須要上面三個包就能夠使用mybatis的逆向工程了。下面看一下它依賴的配置文件。程序員
這是配置文件的存放位置,必定要放在項目的根目錄下,不要方法src下,由於一會用到File來加載這個配置文件。sql
<context 標籤,id隨便取,目前用不到。 targetRuntime運行環境,目前2018年4月30號Mybatis最新的版本爲3.4.6,因此這裏寫3就好,再過幾年有可能會變成4。<commentGenerator>下有個數據庫
<property name="suppressAllComments" value="true" />安全
標籤,該標籤value爲true的時候不顯示生成pojo裏面的註釋,這裏生成的是英文註釋,因此默認選擇爲true便可。<jdbcConnection>標籤須要建立connection對象基本的url,user,password,driverClass四個屬性,按照圖中格式配置便可。被註釋掉的部分是連接oracle數據庫的格式mybatis
<javaTypeResolver>標籤用於將數據庫中的DECIMAL和NUMERIC在pojo類中解析爲java.math.BigDecimal類型,因此咱們這裏寫false,所有解析爲Integer類型。oracle
這裏的三個標籤用於指定生成的mapper,pojo,與mapper接口的包名。和指定項目名,有時候開發中通常都會新建一個java工程來生成,而後將生成的文件拷貝到本身的工程中,這也不麻煩,並且很安全。app
最後的table標籤用於對哪些表使用逆向工程。註釋掉的部分用於指定數據庫字段的Java類型。下面咱們看一下執行代碼。框架
如圖所示,紅色框框標識出的爲逆向工程配置文件的位置,因爲這裏使用File構造方法傳入路徑,因此該配置文件必須放下項目錄下,不要放在src/下面,不然讀不到,會拋出文件沒找到的異常,下面咱們執行一下試試。
這是控制檯log4j日誌打印出的,能夠看到它找到數據庫中的,字段,類型,長度等信息,到這裏說明生成成功了。
咱們刷新一下項目發現src/下多少mapper和pojo包,都是剛纔逆向工程本身生成的。接下來咱們將mapper和pojo拷貝到Spring整合MyBatis環境中測試可否執行SQL語句操做。
這裏補充下上一篇Spring整合MyBatis文章中忘記提到的,咱們經過配置mybatis的mapper掃描包,可以讓Spring將MapperScannerConfigurer裝入容器中,MapperScannerConfigurer可以掃描包下全部子孫包中的mapper接口,爲咱們建立mapper的實現類。圖中紅色框框部分能夠代替已經註釋掉的配置。由於沒有指定接口的 bean名稱,因此咱們只能經過傳入mapper接口的class對象獲取實現類,代碼以下。
圖中重要代碼已經用紅色框框標識出,UserExample是逆向工程生成pojoUser時建立的,該類封裝了一些條件。Example.createCriteria()這個方法時建立了一個條件查詢對象,這裏和hibernate的Criteria對象十分類似,經過andSexEqualTo("1");方法,這個方法至關於where sex = 「 1 」這種限定條件,而後如今調用usermapper中的方法,這裏調用的是cunnt方法,傳入example對象,因爲上一行中example對象已經被咱們封裝了where sex = 「 1 」的限定條件,usermapper.countByExample(example);這句代碼執行後拼接成的sql語句就是 select count(1) form user where sex = '1';這也就是mybatis被稱爲半ORM框架的緣由,也有了些許面向對象的意爲,但功能上還不足以與強大的hibernate相媲美。咱們在建立限定條件對象createCriteria()時,後面的條件是能夠無限增長的,該對象支持各類複雜查詢,功能也仍是十分強大的。
以上就是mybatis的逆向工程介紹了,不光可以本身生成sql,pojo,mapper外,也封裝了對數據庫面向對象的操做,。[非原創]