主要介紹了Java ORM來(lái)源于歷史娩缰,JDBC灸撰、Hibernate和MyBatis的優(yōu)缺點(diǎn),比較他們之間區(qū)別和應(yīng)用場(chǎng)景
歡迎訪問(wèn)本人博客:http://wangnan.tech
JDBC
Java程序是通過(guò)JDBC(Java Data Base Connectivity)連接數(shù)據(jù)庫(kù)的拼坎,JDBC是由SUN公司提出的一系列規(guī)范浮毯,但是它只定義了接口的規(guī)范,而具體的實(shí)現(xiàn)是交給了各個(gè)數(shù)據(jù)庫(kù)廠商去實(shí)現(xiàn)的泰鸡,JDBC是一種典型的橋接模式
JDBC編程步驟
- 使用JDBC編程需要連接數(shù)據(jù)庫(kù)债蓝,注冊(cè)驅(qū)動(dòng)和數(shù)據(jù)庫(kù)信息
- 操作Connection,打開(kāi)Statement對(duì)象
- 通過(guò)Statement執(zhí)行SQL,返回結(jié)果到ResultSet對(duì)象
- 使用ResultSet讀取數(shù)據(jù),然后通過(guò)代碼轉(zhuǎn)換為具體的POJO對(duì)象
- 關(guān)閉數(shù)據(jù)庫(kù)相關(guān)資源
JDBC弊端
- 工作量大
- 編程復(fù)雜
ORM模型
ORM取代了JDBC,所有的ORM模型都是基于JDBC進(jìn)行封裝的盛龄,不同ORM模型對(duì)JDBC封裝的強(qiáng)度是不一樣的
ORM
對(duì)象關(guān)系映射(Object Relational Mapping),簡(jiǎn)單的說(shuō)ORM框架就是數(shù)據(jù)庫(kù)的表和簡(jiǎn)單Java對(duì)象的映射關(guān)系模型惦蚊,我們通過(guò)這層映射關(guān)系就可以簡(jiǎn)單迅速地把數(shù)據(jù)庫(kù)表的數(shù)據(jù)轉(zhuǎn)化為POJO
如圖
Hibernate
Hibername一問(wèn)世就成為了Java世界首選的ORM框架器虾,它是建立在POJO和數(shù)據(jù)庫(kù)表模型的直接映射關(guān)系上的
Hibernate優(yōu)勢(shì)
- 消除了代碼的映射規(guī)則,它全部被分離到了XML或者注解里面去配置
- 無(wú)需再管理數(shù)據(jù)庫(kù)連接蹦锋,它也可以配置在XML里面
- 一個(gè)會(huì)話中兆沙,不要操作多個(gè)對(duì)象,只要操作Session對(duì)象即可
- 關(guān)閉資源只需要關(guān)閉一個(gè)Session便可
Hibernate缺陷
- 全表映射帶來(lái)了不便莉掂,比如更新時(shí)需要發(fā)送所有的字段
- 無(wú)法根據(jù)不同的條件組裝不同的SQL
- 對(duì)多表關(guān)聯(lián)和復(fù)雜SQL查詢(xún)支持較差葛圃,需要自己寫(xiě)SQL,返回后憎妙,需要自己將數(shù)據(jù)組裝為POJO
- 不能有效支持存儲(chǔ)過(guò)程
- 雖然有HQL库正,但是性能較差, 大型互聯(lián)網(wǎng)系統(tǒng)往往需要優(yōu)化SQL厘唾,而hibernate做不到
Mybatis
為了解決Hibernate的不足褥符,一個(gè)半自動(dòng)映射的框架MyBatis應(yīng)運(yùn)而生
mybatis是一個(gè)java持久層框架,它封裝少抚垃、高性能·可優(yōu)化喷楣、維護(hù)簡(jiǎn)單等優(yōu)點(diǎn)成為了目前java移動(dòng)互聯(lián)網(wǎng)網(wǎng)站服務(wù)的首選持久層框架,它特別適合分布式和大數(shù)據(jù)網(wǎng)絡(luò)數(shù)據(jù)庫(kù)編程
之所以稱(chēng)它為半自動(dòng)鹤树,是因?yàn)樗枰止てヅ涮峁㏄OJO铣焊、SQL和映射關(guān)系,而全表映射的Hibernate只需要提供POJO和映射關(guān)系便可
歷史
Mybaits的前身是Apache的一個(gè)開(kāi)源項(xiàng)目iBatis罕伯,2010年這個(gè)項(xiàng)目由apache software foundation 遷移到了 google code 并且改名為Mybatis曲伊,2013年11月遷移到Github,目前mybaits是由Github維護(hù)的
名稱(chēng)
iBatis一詞來(lái)源于“internet”和“abatis”的組合
mybaits所需要提供的映射文件包含以下三個(gè)部分
- SQL
- 映射規(guī)則
- POJO
什么時(shí)候用mybaits
- hibernate只適用于場(chǎng)景不太復(fù)雜,要求性能不太苛刻的時(shí)候
- mybatis擁有動(dòng)態(tài)列追他,動(dòng)態(tài)表名坟募,存儲(chǔ)過(guò)程支持,同時(shí)提供了簡(jiǎn)易的緩存邑狸、日志懈糯、級(jí)聯(lián),但是它的缺陷是需要你提供映射規(guī)則和sql推溃,所以它的開(kāi)發(fā)工作量比Hibernate略大一些
(注:內(nèi)容整理自《深入淺出MyBatis技術(shù)原理與實(shí)戰(zhàn)》)