MyBatis高級應用之逆向工程自動生成SQL語句

2020-11-20 Java成長催化師

本文以Spring整合MyBatis環境下,介紹MyBatis逆向工程自動生成pojo,mapper,dao的Java類。MyBatis的一個主要的特點就是需要程式設計師自己編寫sql,那麼如果表太多的話,難免會很麻煩,所以mybatis官方提供了一個逆向工程,可以針對單表自動生成mybatis執行所需要的代碼,一般在開發中,常用的逆向工程方式是通過資料庫的表生成代碼。下圖為逆向工程依賴的jar包。

mybatis-generator-core-1.3.6.jar為逆向工程的核心包

mysql-connector-java-8.0.9-rc.jar為連接資料庫所需驅動

mybatis-3.4.6.jar為mybatis框架依賴的jar包,到這裡就足夠了,這裡可以添加日誌文件,因為不是必須的所以就省略了,我們只需要上面三個包就可以使用mybatis的逆向工程了。下面看一下它依賴的配置文件。

這是配置文件的存放位置,一定要放在項目的根目錄下,不要方法src下,因為一會用到File來加載這個配置文件。

<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資料庫的格式

<javaTypeResolver>標籤用於將資料庫中的DECIMAL和NUMERIC在pojo類中解析為java.math.BigDecimal類型,所以我們這裡寫false,全部解析為Integer類型。

這裡的三個標籤用於指定生成的mapper,pojo,與mapper接口的包名。和指定項目名,有時候開發中一般都會新建一個java工程來生成,然後將生成的文件拷貝到自己的工程中,這也不麻煩,而且很安全。

最後的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外,也封裝了對資料庫面向對象的操作。

來源:https://www.tuicool.com/articles/vaIn2y7

相關焦點

  • Java程式設計師開發必備 MyBatis高級應用之逆向工程自動生成SQL語句
    本文以Spring整合MyBatis環境下,介紹MyBatis逆向工程自動生成pojo,mapper,dao的Java類。MyBatis的一個主要的特點就是需要程式設計師自己編寫sql,那麼如果表太多的話,難免會很麻煩,所以mybatis官方提供了一個逆向工程,可以針對單表自動生成mybatis執行所需要的代碼,一般在開發中,常用的逆向工程方式是通過資料庫的表生成代碼。
  • 開發工具:Mybatis.Plus.插件三種方式的逆向工程
    一、逆向工程簡介在Java開發中,持久層最常用的框架就是mybatis,該框架需要編寫sql語句,mybatis官方提供逆向工程,可以把數據表自動生成執行所需要的基礎代碼,例如:mapper接口,sql映射文件,pojo實體類等,避免基礎代碼維護的繁雜過程。
  • mybatis攔截器實現主鍵自動生成
    前言前陣子和朋友聊天,他說他們項目有個需求,要實現主鍵自動生成,不想每次新增的時候,都手動設置主鍵。於是我就問他,那你們資料庫表設置主鍵自動遞增不就得了。mybatis-plus就支持註解式的id自動生成,而且mybatis-plus只是對mybatis進行增強不做改變。朋友還是那句話,說為了項目穩定,之前項目組沒有使用mybatis-plus的經驗,貿然切換不知道會不會有什麼坑。後面沒招了,我就跟他說不然你用mybatis的攔截器實現一個吧。於是又有一篇吹水的創作題材出現。
  • mybatis 逆向工程使用姿勢不對,把表清空了,心裡慌的一比
    這鍋只能自己背了你用過 mybatis 逆向工程(mybatis-generator-maven-plugin)生成相關文件嗎?比如 select 語句針對大表、關鍵表操作的時候,不能從代碼的角度限定 SQL 必須帶上索引欄位查詢。上面的這些問題我們怎麼處理呢?我的建議是不要使用 mybatis 的逆向工程,全都手寫。
  • Mybatis 逆向工程使用姿勢不對文檔全被清空,一怒之下寫了個插件……
    這鍋只能自己背了你用過 Mybatis 逆向工程(mybatis-generator-maven-plugin)生成相關文件嗎?就像這樣的:可以看到逆向工程幫我們生成了實體類、Mapper 接口和 Mapper.xml。用起來真的很方便,我用了好幾年了,但是前段時間翻車了。
  • Mybatis第四講 插件開發
    3.3 Mybatis 逆向工程1、什麼是逆向工程?mybaits 需要程式設計師自己編寫 sql 語句, mybatis 官方提供逆向工程 可以針對單表自動生成 mybatis 執行所需要的代碼 (mapper.
  • mybatis框架之 resultMap 的高級應用
    各位小夥伴今天我們來了解resultMap 的高級應用mybatis 查詢多表資料庫表結構中存在的幾種多表關係:一對一 ,一對多, 多對一 ,多對多一對一的關係就比如我們創建一個資料庫,有一個用戶表,用戶表就只會有一個用戶名,密碼什麼的。
  • MyBatis dynamic SQL 1.2.0 發布,生成動態 SQL 的框架
    MyBatis dynamic SQL 1.2.0 已發布,此工具庫是生成動態 SQL 語句的通用框架,可把它看作是一個類型安全的 SQL 模板庫,它還支持 MyBatis3 和 Spring
  • SpringBoot整合MyBatis+詳細列印執行SQL語句
    其實我一開始也是使用mybatis的starter的,但是當我需要配置一個讓mybatis可以將執行sql語句列印出來的配置時,難到了我,所以才想和大家分享一下springBoot整合MyBatis的方法,如果大家有更好地方法,歡迎討論。
  • mybatis框架之多表高級查詢
    學習內容安排如下:補充說明知識點:resultMap,sql片段。mybatis中的高級查詢,即多表關聯查詢。主要分為:一對一查詢,一對多查詢,多對多查詢,本來打算全學完的,奈何計劃趕不上變化。一、知識點補充1resultMap又要提到前面那個說了好幾遍的起別名問題了,使用resultMap標籤也能解決這個問題。
  • Mybatis 動態sql語句if和where標籤巧妙使用
    本文章描述的是 Mybatis if標籤和where標籤的結合使用需求是:根據電話和名字查用戶數據1 sql查詢查詢sql語句如下:SELECT id , gender , nickname , mobile , avatar FROM dts_user WHERE gender = 1 AND mobile LIKE '%456%'
  • Mybatis中trim標籤的使用教程
    mybatis的trim標籤一般用於去除sql語句中多餘的and關鍵字,逗號,或者給sql語句前拼接 「where「、「set「以及「values
  • 五大框架之MyBatis面試經常被問到的問題
    前面講了springmvc和hibernate的一些原理和使用,有些朋友私信我問能不能講一下面試中經常遇到的問題,那麼今天就不講mybatis在項目中怎麼使用的,著重談一下我經常遇到的一些問題吧,無論是筆試題還是面試官問到的一些問題,能想起來的都列舉了下來。1.JDBC編程有哪些不足之處,MyBatis是如何解決這些問題的?
  • 一、Mybatis基本應用
    操作① 資料庫連接創建、釋放頻繁造成系統資源浪費從而影響系統性能② sql 語句在代碼中硬編碼,造成代碼不易維護,實際應用 sql 變化的可能較大,sql 變動需要改變java代碼。<id>:增刪改查語句相應的id,可與namespace搭配定位<resultType>:用來存放查詢結果對應實體類型的路徑,表示查詢結果自動封裝到這裡,如果實體的屬性名與表中欄位名一致,將查詢結果自動封裝到實體類中<ResultMap>:如果實體的屬性名與表中欄位名不一致,可以使用ResutlMap實現手動封裝到實體類中<parameterType
  • mybatis中trim標籤的使用
    的trim標籤一般用於去除sql語句中多餘的and關鍵字,逗號,或者給sql語句前拼接 「where「、「set「以及「values(「 等前綴,或者添加「)「等後綴,可用於選擇性插入、更新、刪除或者條件查詢等操作。
  • mybatis-plus 2.1.1 新增 mybatis 多租戶 SQL 解析功能
    mybatis-plus 是一款 mybatis 動態 SQL 自動注入 mybatis 增刪改查 CURD 操作中間件。
  • Mybatis第一天:Mybatis框架簡介與快速入門
    Mybatis通過xml或註解的方式將要執行的各種statement(statement、preparedStatemnt、CallableStatement)配置起來,並通過java對象和statement中的sql進行映射生成最終執行的sql語句,最後由mybatis框架執行sql並將結果映射成java對象並返回。
  • Java程式設計師面試之Mybatis面試題整理一
    (3)通過xml 文件或註解的方式將要執行的各種 statement 配置起來,並通過java對象和 statement中sql的動態參數進行映射生成最終執行的sql語句,最後由mybatis框架執行sql並將結果映射為java對象並返回。(從執行sql到返回result的過程)。
  • Java程式設計師必須知道的MyBatis經典面試題
    MyBatisMyBatis 本是apache的一個開源項目,MyBatis 是一款優秀的持久層框架,它支持定製化 SQL、存儲過程以及高級映射,避免了JDBC手動設置參數和獲取結果集。它可以使用XML配置文件或者註解寫SQL語句。對於現在主流的持久層框架,經常會在面試題目中出現,那麼你對MyBatis經典面試題了解多少呢?1. #{}和${}的區別是什麼?#{}是預編譯處理,${}是字符串替換Mybatis在處理#{}時,會將sql中的#{}替換為?
  • MyBatis 標籤 trim,你不會以為我是去空格的吧?
    MyBatis基礎知識點:trim標籤的使用作者:wt_better來源 : http://blog.csdn.net/wt_better/article/details/80992014MyBatis的trim標籤一般用於去除sql