JDBC、ORM ☞ Hibernate、Mybaits

appleyk發表於2018-09-02

一、JDBC

 

Java Data Base Connectivity :Java資料庫連線

由SUN公司提出的一系列規範 -- 只定義了介面的規範,具體實現是交給各個資料庫廠商去實現的,JDBC是一種典型的橋接模式

 

(1) 如何使用JDBC規範進行程式設計實現對資料庫的CRUD(create、read、update、delete)操作

 

A:註冊資料庫驅動和資訊(以MySql資料為例

 

 載入資料庫驅動 

 

Class.forName("com.mysql.jdbc.Driver")

 

 載入資料庫連線資訊

 

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/3306/test",username,pwd)

 

B:操作conn,構建Statement(PrepareStatement)物件

 

說明:

PreparedStatement是預編譯的,對於批量處理可以大大提高效率. 也叫JDBC儲存過程

prepareStatement會先初始化SQL,先把這個SQL提交到資料庫中進行預處理,多次使用可提高效率。

Statement不會初始化,沒有預處理,每次都是從0 開始執行SQl


 

PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement("insert into user(name,age) values(?,?)");

 

 

C:通過Statement執行SQL語句

 

增刪改:

 

int ret = pstmt.executeUpdate();

if(ret > 0){

    //SQL語句執行成功
 
}

 

查詢:

 

ResultSet rs = pstmt.executeQuery();

while(rs.next){

    //操作rs資料集,將資料對映成Java Pojo物件

}

 

 

D:最後用完後,關閉conn

 

conn.close();

 

 

(2) JDBC弊端

 

1、需要編寫大量demo,demo複用性不夠好,需要自己封裝Dao層達到程式碼的複用

2、資料集到pojo物件的對映關係太過拘泥,需要自己進行適配,工作量大

 

 

 

二、ORM

 

物件關係對映:英語:(Object Relational Mapping,簡稱ORM,或O/RM,或O/R mapping)

 

其取代了JDBC,並對其進行了封裝(簡化工作量,使得資料到物件的對映關係更為簡單)

 

用於實現物件導向程式語言裡不同型別系統的資料之間的轉換,簡單明瞭的說就是:

 

通過程式設計,操作pojo物件,加上對映關係,即可達到運算元據庫的效果,反之,則是將資料庫操作的資料對映成pojo物件

 

 

 

 

 

三、Hibernate

 

 

(1) 什麼是Hibernate?

 

百度百科:Hibernate是一個開放原始碼的物件關係對映框架,它對JDBC進行了非常輕量級物件封裝,它將POJO與資料庫表建立對映關係,是一個全自動的ORM框架,hibernate可以自動生成SQL語句,自動執行,使得Java程式設計師可以隨心所欲的使用物件程式設計思維來操縱資料庫。

 

簡單點就是:Hibernate是一個開源的、輕量級的實現了ORM(物件關係對映技術的全自動的資料持久層框架

 

(2) Hibernate發展史

 

2001年:Hibernate第一個版本釋出

2002年:人們開始關注Hibernate

2003年:Hibernate開發團隊進入JBoss公司,成為該公司的子專案

2004年:Hibernate成為持久化框架的標準

2005年:JBOSS釋出Hibernate3

2006年:RedHat公司收購JBOSS

2011年:Hibernate4釋出

至今    :Hibernate5+

 

 

 

 

四、Mybatis

 

 

(1)什麼是Mybatis?

 

 

 

百度百科:MyBatis本是Apache的一個開源專案iBatis, 2010年這個專案由Apache Oftware Foundation 遷移到了Google Code,並且改名為MyBatis 。2013年11月遷移到Github。 iBATIS一詞來源於“internet”和“abatis”的組合,是一個基於Java的持久層框架。iBATIS提供的持久層框架包括SQL Maps和Data Access Objects(DAO)

 

 

簡介:MyBatis 是一款優秀的持久層框架,它支援定製化 SQL、儲存過程以及高階對映。MyBatis 避免了幾乎所有的 JDBC 程式碼和手動設定引數以及獲取結果集。MyBatis 可以使用簡單的 XML 或註解來配置和對映原生資訊,將介面和 Java 的 POJOs(Plain Old Java Objects,普通的 Java物件)對映成資料庫中的記錄。

 

 

(2)功能架構

 

 

 

 

 

 

 

 

五、Mybatis和Hibernate的區別

 

 

都是資料持久層框架,都實現了物件關係對映,那麼,二者各自有什麼優勢和缺點呢?

 

 

相同點

 

  • 通過SessionFactoryBuider由XML配置檔案生成SessionFactory
  • 然後由SessionFactory 生成Session
  • 最後由Session來開啟執行事務(Transaction)和SQL語句
  • 其中SessionFactoryBuider,SessionFactory,Session的生命週期都是差不多的
  • Hibernate和MyBatis都支援JDBC和JTA事務處理。

 

 

SQL語句生成?

 

(1)Hibernate是全自動的ORM框架,擁有完整的JavaBean物件與資料庫的對映結構來自動生成SQL語句

(2)Mybaits是半自動的ORM框架,在查詢關聯物件或關聯集合物件時,需要手動編寫SQL來完成,而且這一塊的工作量較大

 

小結:Hibernate是全自動的ORM,MyBatis是半自動的ORM

 

資料庫移植性?

 

(1)Hibernate通過它強大的對映結構和hql語言,大大降低了物件與資料庫(oracle、mysql等)之間的耦合性,因此,資料庫遷移考慮的問題較少(效能高)

(2)由於Mybaits是半自動的ORM框架,其大量充斥著我們自己寫的SQL語句,而不同的資料庫之間的SQL寫法存在著差異,因此,資料庫移植考慮的問題會比較多(效能低)

 

小結:在資料庫移植性上Hibernate要高於Mybatis

 

 

SQL優化?

 

(1)Hibernate由於要我們編寫的SQL比較少,而大多數的資料上的優化都是從SQL入手的,因此,在SQL語句優化上,Hibernate要稍微複雜點,雖然其有HQL,但是功能不及SQL強大,

(2)Mybatis大部分的SQL都是寫在XML裡或者通過註解實現的,因此,可以直接對SQL語句進行優化,

 

小結:在原生SQL優化上,Mybatis要比Hibernate更加靈活些

 

配套設施?

 

(1)Hibernate日誌系統非常健全,涉及廣泛,包括:SQL記錄、關係異常、優化警告、快取提示、髒資料警告等,其有更好的二級快取機制,也可以使用第三方快取

(2)Mybaits相比就簡陋的多了,日誌出了基本記錄功能外,其他功能相對薄弱,二級快取機制不佳,也支援第三方快取

 

補充:

Hibernate對查詢物件有著良好的管理機制,使用者無需關心SQL。所以在使用二級快取時如果出現髒資料,系統會報出錯誤並提示。

MyBatis使用二級快取時需要特別小心。如果不能完全確定資料更新操作的波及範圍,就要避免Cache的盲目使用。否則,髒資料的出現會給系統的正常執行帶來很大的隱患。

 

注:一級快取指本地快取,預設會開啟,不受控制

 

小結:Hibernate比Mybaits擁有更完善的日誌系統且二級快取機制要優於Mybaits

 

 

學習成本?

 

(1)Hibernate配置更為複雜,更注重細節,要想學精,花費的時間和精力較高

(2)Mybatis框架簡單,SQL配置更為靈活,寫起來也是隨心所欲,基本上會寫SQL的童鞋都可以很快的入手

 

小結:Mybaits更加小巧,靈活,相比較Hibernate來說,更容易上手,更容易實現快速開發

 

 

Spring整合?

 

        通過對比,我還是推薦大家使用Spring+Spring MVC +Mybaits的框架進行Java Web專案的開發,或者使用比較流行的Spring Boot框架整合Mybatis進行幾乎零配置(XML模板定製的配置方式改為在類中進行編寫程式碼加註解的方式實現XML零配置,)的Web應用程式的快速、高效的開發,其中Mybatis框架中我推薦使用其通用Mapper(單表操作效率非常高,而且一句SQL都不用寫,且XML對映檔案也不用配置)進行快速Dao層開發

 

         有時間,我會更一個標準的由Spring Boot + Mybaits 框架開發的的後端專案的系列教程,其中涵蓋了:

 

1、如何在IDEA中進行Spring Boot專案的快速搭建

2、如何在專案中對依賴的Jar包進行Maven管理

3、如何整合Mybaits框架

4、如何利用Mybaits框架實現ORM--->編寫業務模型和實體模型以及配置物件之間的對映關係(XML)

5、如何利用實體模型進行DAO層的開發,比如,如何通過配置XML對映,編寫SQL模板實現實體模型的批量插入和更新

6、如何根據查詢過濾器fiter進行SQL的定製來實現業務模型的分頁查詢(實體模型轉業務模型+PageHelper分頁外掛)....etc

 

 

 

相關文章