新聞中心
數(shù)據(jù)層框架的發(fā)展史
JDBC編碼的幾大問(wèn)題和MyBatis等框架的發(fā)展支持原因?
在最初編寫JDBC連接數(shù)據(jù)庫(kù)的時(shí)候,各種代碼操作較為復(fù)雜,而且有很多缺陷。缺陷總結(jié)如下:
創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括九原網(wǎng)站建設(shè)、九原網(wǎng)站制作、九原網(wǎng)頁(yè)制作以及九原網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,九原網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到九原省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
- 方法的封裝問(wèn)題
- 數(shù)據(jù)源的支持
- 映射結(jié)果集的接收和處理
- SQL語(yǔ)句硬編碼
- 程序參數(shù)只能按照順序傳入(占位符)
- 沒(méi)有實(shí)現(xiàn)實(shí)體類到數(shù)據(jù)庫(kù)記錄的映射
- 沒(méi)有提供緩存等功能
工具類封裝的出現(xiàn)解決了一部分問(wèn)題
相應(yīng)的工具類如:springjdbc、jdbcutils、Apache DbUtils等。這樣的工具類主要解決了一下幾個(gè)問(wèn)題:
- 方法的封裝
- 數(shù)據(jù)源的支持
- 映射結(jié)果集
工具類的響應(yīng)實(shí)現(xiàn)解決了部分JDBC的缺陷,但是并不完美。每一次的改進(jìn)和工具類的出現(xiàn)的就是我們框架的前身出現(xiàn),框架也是工具。在越來(lái)越完善的解決方案的出現(xiàn)之后,ORM框架基本就成型了。同時(shí)解決了以上JDBC列出來(lái)的各種問(wèn)題。
ORM框架,全稱Object Relational Mapping,對(duì)象關(guān)系的映
面向?qū)ο蟮拈_(kāi)發(fā)方法是當(dāng)今企業(yè)級(jí)應(yīng)用開(kāi)發(fā)環(huán)境中的主流開(kāi)發(fā)方法,關(guān)系數(shù)據(jù)庫(kù)是企業(yè)級(jí)應(yīng)用環(huán)境中永久存放數(shù)據(jù)的主流數(shù)據(jù)存儲(chǔ)系統(tǒng)。對(duì)象和關(guān)系數(shù)據(jù)是業(yè)務(wù)實(shí)體的兩種表現(xiàn)形式,業(yè)務(wù)實(shí)體在內(nèi)存中表現(xiàn)為對(duì)象,在數(shù)據(jù)庫(kù)中表現(xiàn)為關(guān)系數(shù)據(jù)。內(nèi)存中的對(duì)象之間存在關(guān)聯(lián)和繼承關(guān)系,而在數(shù)據(jù)庫(kù)中,關(guān)系數(shù)據(jù)無(wú)法直接表達(dá)多對(duì)多關(guān)聯(lián)和繼承關(guān)系。因此,對(duì)象-關(guān)系映射(ORM)系統(tǒng)一般以中間件的形式存在,主要實(shí)現(xiàn)程序?qū)ο蟮疥P(guān)系數(shù)據(jù)庫(kù)數(shù)據(jù)的映射。
ORM框架的基本準(zhǔn)則
- A. 簡(jiǎn)單:ORM以最基本的形式建模數(shù)據(jù)。比如ORM會(huì)將MySQL的一張表映射成一個(gè)Java類(模型),表的字段就是這個(gè)類的成員變量
- B. 精確:ORM使所有的MySQL數(shù)據(jù)表都按照統(tǒng)一的標(biāo)準(zhǔn)精確地映射成java類,使系統(tǒng)在代碼層面保持準(zhǔn)確統(tǒng)一
- C.易懂:ORM使數(shù)據(jù)庫(kù)結(jié)構(gòu)文檔化。比如MySQL數(shù)據(jù)庫(kù)就被ORM轉(zhuǎn)換為了java程序員可以讀懂的java類,java程序員可以只把注意力放在他擅長(zhǎng)的java層面(當(dāng)然能夠熟練掌握MySQL更好)
- D.易用:ORM包含對(duì)持久類對(duì)象進(jìn)行CRUD操作的API,例如create(), update(), save(), load(), find(), find_all(), where()等,也就是講sql查詢?nèi)糠庋b成了編程語(yǔ)言中的函數(shù),通過(guò)函數(shù)的鏈?zhǔn)浇M合生成最終的SQL語(yǔ)句。通過(guò)這種封裝避免了不規(guī)范、冗余、風(fēng)格不統(tǒng)一的SQL語(yǔ)句,可以避免很多人為Bug,方便編碼風(fēng)格的統(tǒng)一和后期維護(hù)。
最早的ORM框架hibernate
Hibernate是一種ORM框架,全稱為 Object_Relative DateBase-Mapping,在Java對(duì)象與關(guān)系數(shù)據(jù)庫(kù)之間建立某種映射,以實(shí)現(xiàn)直接存取Java對(duì)象!
Hibernate 優(yōu)勢(shì)
- 類別到數(shù)據(jù)庫(kù)表格中,并且不用編寫任何代碼。
- 為在數(shù)據(jù)庫(kù)中直接儲(chǔ)存和檢索 Java 對(duì)象提供簡(jiǎn)單的 APIs。
- 如果在數(shù)據(jù)庫(kù)中或任何其它表格中出現(xiàn)變化,那么僅需要改變 XML 文件屬性。
- 抽象不熟悉的 SQL 類型,并為我們提供工作中所熟悉的 Java 對(duì)象。
- Hibernate 不需要應(yīng)用程序服務(wù)器來(lái)操作。
- 操控你數(shù)據(jù)庫(kù)中對(duì)象復(fù)雜的關(guān)聯(lián)。
- 最小化與訪問(wèn)數(shù)據(jù)庫(kù)的智能提取策略。
- 提供簡(jiǎn)單的數(shù)據(jù)詢問(wèn)。
Hibernate 響應(yīng)的一些問(wèn)題
- 無(wú)法自定義SQL,優(yōu)化相對(duì)困難
- 不制動(dòng)動(dòng)態(tài)的SQL
- 復(fù)雜的表關(guān)系會(huì)導(dǎo)致Hibernate開(kāi)發(fā)難度
- 加載問(wèn)題
什么是 MyBatis?
是一款面向?qū)ο蠛头祷丶P(guān)系的數(shù)據(jù)層封裝,有效的減少jdbc的代碼。
缺點(diǎn):
- 不方便移植,數(shù)據(jù)庫(kù)更換需要字段比較麻煩,需要改寫sql
- 對(duì)開(kāi)發(fā)人員所寫的SQL依賴很強(qiáng)。
優(yōu)點(diǎn):
- 使用連接池對(duì)連接進(jìn)行管理
- SQL和代碼分離,集中管理
- 參數(shù)映射和動(dòng)態(tài)SQL
- 結(jié)果集映射
- 緩存管理
- 重復(fù)SQL的提取
- 插件機(jī)制
- 手寫sql,能夠有效的精準(zhǔn)把控查詢的速度,便于優(yōu)化查詢速度
- mybatis不會(huì)對(duì)應(yīng)用程序或者數(shù)據(jù)庫(kù)的現(xiàn)有設(shè)計(jì)強(qiáng)加任何影響
- 通過(guò)提供DAO層,將業(yè)務(wù)邏輯和數(shù)據(jù)訪問(wèn)邏輯分離,使系統(tǒng)的設(shè)計(jì)更清晰,更易維護(hù),更易單元測(cè)試。
- 保證名稱相同,配置好映射關(guān)系即可自動(dòng)映射或者,不配置映射關(guān)系,通過(guò)配置列名=字段名也可完成自動(dòng)映射。
什么是 Spring Data JPA(本文JPA只寫Spring Data JPA)
Spring Data JPA是更大的Spring Data系列的一部分,可以輕松實(shí)現(xiàn)基于JPA的存儲(chǔ)庫(kù)。此模塊處理對(duì)基于JPA的數(shù)據(jù)訪問(wèn)層的增強(qiáng)支持。它使構(gòu)建使用數(shù)據(jù)訪問(wèn)技術(shù)的Spring驅(qū)動(dòng)應(yīng)用程序變得更加容易。
選擇什么樣的ORM框架參考:
- 業(yè)務(wù)相對(duì)簡(jiǎn)單項(xiàng)目可以使用Hibernate
- 需要靈活SQL的選擇可以使用MyBatis(SQL過(guò)長(zhǎng)和SQL很復(fù)雜的情況)
- 對(duì)性能要求比較高可以使用JDBC(如:我們寫的項(xiàng)目很小,或者說(shuō)就是需要幾個(gè)接口,這個(gè)時(shí)候我們選擇框架就會(huì)過(guò)于臃腫和復(fù)雜)
- Sping JDBC可以和 ORM框架混合使用(這種情況很少,但是如果某些業(yè)務(wù)可能單獨(dú)需要數(shù)據(jù)源對(duì)接某一個(gè)接口,這個(gè)時(shí)候可能要適配器兼容JDBC接入)
分享文章:MyBatis的發(fā)展和選型
網(wǎng)站鏈接:http://m.biofuelwatch.net/article/jgdehi.html