JDBC、ORM ☞ Hibernate、Mybaits
一、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
相關文章
- JDBC 與 Hibernate 共存JDBC
- Hibernate與JDBC混合使用JDBC
- 手寫 Hibernate ORM 框架 00-hibernate 簡介ORM框架
- hibernate進行JDBC批量新增JDBC
- Hibernate-ORM:13.Hibernate中的連線查詢ORM
- 從JDBC到ORM的事務實現JDBCORM
- 重學 Java 設計模式:實戰中介者模式「按照Mybaits原理手寫ORM框架,給JDBC方式運算元據庫增加中介者場景」Java設計模式AIORM框架JDBC
- hibernate跟jdbc的查詢速度相差10???JDBC
- 手寫 Hibernate ORM 框架 05-基本效果測試ORM框架
- Mybatis與傳統jdbc和Hibernate的比較MyBatisJDBC
- Spring ORM+Hibernate?Out!換 Spring Data JPA 吧!SpringORM
- org.springframework.orm.hibernate3.HibernateQueryException: could not locate naSpringFrameworkORMException
- 手寫 Hibernate ORM 框架 01-註解常量定義ORM框架
- java中批量插入資料jdbc hibernate Mybatis使用方式JavaJDBCMyBatis
- 請教banq問題,關於hibernate的jdbc的JDBC
- 執行例子出錯,我的hibernate找不到JDBC連線?JDBC
- ORM框架 Mybatis、Hibernate、Spring Data JPA之到底該用誰,誰更牛*ORM框架MyBatisSpring
- 一箇中型的專案,用 hibernate 來作ORM,如何更好的應用呢?...ORM
- mybaits原始碼分析--事務管理(八)AI原始碼
- mybaits原始碼分析--日誌模組(四)AI原始碼
- mybaits原始碼分析--快取模組(六)AI原始碼快取
- mybaits原始碼分析--binding模組(五)AI原始碼
- 這些屬性的含義,我的理解對嗎?(jdbc2.0或hibernate)JDBC
- mybaits原始碼分析--自定義外掛(七)AI原始碼
- Spring&Mybaits資料庫配置解惑SpringAI資料庫
- Django ORMDjangoORM
- orm 框架ORM框架
- orm初探ORM
- Mybatis原始碼系列1-Mybaits初始化MyBatis原始碼AI
- mybaits原始碼分析--型別轉換模組(三)AI原始碼型別
- MyBaits | 對映檔案之引數處理AI
- 如何實現一個mybaits 分頁外掛AI
- JavaEE(12)Spring整合Mybaits、宣告式事務JavaSpringAI
- spring boot使用註解的方式整合mybaitsSpring BootAI
- JDBCJDBC
- 手擼ORM淺談ORM框架之Query篇ORM框架
- 手擼ORM淺談ORM框架之Delete篇ORM框架delete
- 手擼ORM淺談ORM框架之Update篇ORM框架