1. 程式人生 > 程式設計 >MyBatis的發展和選型

MyBatis的發展和選型

xlecho編輯整理,歡迎轉載,轉載請宣告文章來源。歡迎新增echo微信(微訊號:t2421499075)交流學習。 百戰不敗,依不自稱常勝,百敗不頹,依能奮力前行。——這才是真正的堪稱強大!!

參考文章列表:

資料層框架的發展史

JDBC編碼的幾大問題和MyBatis等框架的發展支援原因?
在最初編寫JDBC連線資料庫的時候,各種程式碼操作較為複雜,而且有很多缺陷。缺陷總結如下:

  • 方法的封裝問題
  • 資料來源的支援
  • 對映結果集的接收和處理
  • SQL語句硬編碼
  • 程式引數只能按照順序傳入(佔位符)
  • 沒有實現實體類到資料庫記錄的對映
  • 沒有提供快取等功能

工具類封裝的出現解決了一部分問題

相應的工具類如:springjdbc、jdbcutils、Apache DbUtils等。這樣的工具類主要解決了一下幾個問題:

  • 方法的封裝
  • 資料來源的支援
  • 對映結果集

工具類的響應實現解決了部分JDBC的缺陷,但是並不完美。每一次的改進和工具類的出現的就是我們框架的前身出現,框架也是工具。在越來越完善的解決方案的出現之後,ORM框架基本就成型了。同時解決了以上JDBC列出來的各種問題。

ORM框架,全稱Object Relational Mapping,物件關係的映

面向物件的開發方法是當今企業級應用開發環境中的主流開發方法,關係資料庫是企業級應用環境中永久存放資料的主流資料儲存系統。物件和關係資料是業務實體的兩種表現形式,業務實體在記憶體中表現為物件,在資料庫中表現為關係資料。記憶體中的物件之間存在關聯和繼承關係,而在資料庫中,關係資料無法直接表達多對多關聯和繼承關係。因此,物件-關係對映(ORM)系統一般以中介軟體的形式存在,主要實現程式物件到關係資料庫資料的對映。

ORM框架的基本準則

  • A. 簡單:ORM以最基本的形式建模資料。比如ORM會將MySQL的一張表對映成一個Java類(模型),表的欄位就是這個類的成員變數
  • B. 精確:ORM使所有的MySQL資料表都按照統一的標準精確地對映成java類,使系統在程式碼層面保持準確統一
  • C.易懂:ORM使資料庫結構檔案化。比如MySQL資料庫就被ORM轉換為了java程式設計師可以讀懂的java類,java程式設計師可以只把注意力放在他擅長的java層面(當然能夠熟練掌握MySQL更好)
  • D.易用:ORM包含對持久類物件進行CRUD操作的API,例如create(),update(),save(),load(),find(),find_all(),where()等,也就是講sql查詢全部封裝成了程式語言中的函式,通過函式的鏈式組合生成最終的SQL語句。通過這種封裝避免了不規範、冗餘、風格不統一的SQL語句,可以避免很多人為Bug,方便編碼風格的統一和後期維護。

最早的ORM框架hibernate

Hibernate是一種ORM框架,全稱為 Object_Relative DateBase-Mapping,在Java物件與關係資料庫之間建立某種對映,以實現直接存取Java物件!

  • Hibernate 優勢
  • * 類別到資料庫表格中,並且不用編寫任何程式碼。
  • * 為在資料庫中直接儲存和檢索 Java 物件提供簡單的 APIs。
  • * 如果在資料庫中或任何其它表格中出現變化,那麼僅需要改變 XML 檔案屬性。
  • * 抽象不熟悉的 SQL 型別,併為我們提供工作中所熟悉的 Java 物件。
  • * Hibernate 不需要應用程式伺服器來操作。
  • * 操控你資料庫中物件複雜的關聯。
  • * 最小化與訪問資料庫的智慧提取策略。
  • * 提供簡單的資料詢問。
  • Hibernate 響應的一些問題
  • * 無法自定義SQL,優化相對困難
  • * 不制動動態的SQL
  • * 複雜的表關係會導致Hibernate開發難度
  • * 載入問題

什麼是 MyBatis?

是一款面向物件和返回集關係的資料層封裝,有效的減少jdbc的程式碼。

  • 缺點:
  • * 不方便移植,資料庫更換需要欄位比較麻煩,需要改寫sql
  • * 對開發人員所寫的SQL依賴很強。
  • 優點:
  • * 使用連線池對連線進行管理
  • * SQL和程式碼分離,集中管理
  • * 引數對映和動態SQL
  • * 結果集對映
  • * 快取管理
  • * 重複SQL的提取
  • * 外掛機制
  • * 手寫sql,能夠有效的精準把控查詢的速度,便於優化查詢速度
  • * mybatis不會對應用程式或者資料庫的現有設計強加任何影響
  • * 通過提供DAO層,將業務邏輯和資料訪問邏輯分離,使系統的設計更清晰,更易維護,更易單元測試。
  • * 保證名稱相同,配置好對映關係即可自動對映或者,不配置對映關係,通過配置列名=欄位名也可完成自動對映。

什麼是 Spring Data JPA(本文JPA只寫Spring Data JPA)

Spring Data JPA是更大的Spring Data系列的一部分,可以輕鬆實現基於JPA的儲存庫。此模組處理對基於JPA的資料訪問層的增強支援。它使構建使用資料訪問技術的Spring驅動應用程式變得更加容易。

選擇什麼樣的ORM框架參考:

  • 業務相對簡單專案可以使用Hibernate
  • 需要靈活SQL的選擇可以使用MyBatis(SQL過長和SQL很複雜的情況)
  • 對效能要求比較高可以使用JDBC(如:我們寫的專案很小,或者說就是需要幾個介面,這個時候我們選擇框架就會過於臃腫和複雜)
  • Sping JDBC可以和 ORM框架混合使用(這種情況很少,但是如果某些業務可能單獨需要資料來源對接某一個介面,這個時候可能要介面卡相容JDBC接入)
    做一個有底線的部落格主