日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

框架:Hibernate和Mybatis的区别

發(fā)布時(shí)間:2025/3/21 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 框架:Hibernate和Mybatis的区别 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Mybatis和hibernate不同,

Mybatis不完全是一個(gè)ORM框架,因?yàn)镸yBatis需要程序員自己編寫Sql語(yǔ)句,不過(guò)mybatis可以通過(guò)XML或注解方式靈活配置要運(yùn)行的sql語(yǔ)句,并將java對(duì)象和sql語(yǔ)句映射生成最終執(zhí)行的sql,最后將sql執(zhí)行的結(jié)果再映射生成java對(duì)象。


Mybatis學(xué)習(xí)門檻低,簡(jiǎn)單易學(xué),程序員直接編寫原生態(tài)sql,可嚴(yán)格控制sql執(zhí)行性能,靈活度高,非常適合對(duì)關(guān)系數(shù)據(jù)模型要求不高的軟件開發(fā),例如互聯(lián)網(wǎng)軟件、企業(yè)運(yùn)營(yíng)類軟件等,因?yàn)檫@類軟件需求變化頻繁,一但需求變化要求成果輸出迅速。但是靈活的前提是mybatis無(wú)法做到數(shù)據(jù)庫(kù)無(wú)關(guān)性,如果需要實(shí)現(xiàn)支持多種數(shù)據(jù)庫(kù)的軟件則需要自定義多套sql映射文件,工作量大(因?yàn)槊恳恢蠸QL的語(yǔ)法有些不同)

mybatis無(wú)法做到數(shù)據(jù)庫(kù)無(wú)關(guān)性

Hibernate對(duì)象/關(guān)系映射能力強(qiáng),數(shù)據(jù)庫(kù)無(wú)關(guān)性好,對(duì)于關(guān)系模型要求高的軟件(例如需求固定的定制化軟件)如果用hibernate開發(fā)可以節(jié)省很多代碼,提高效率。但是Hibernate的學(xué)習(xí)門檻高,要精通門檻更高,而且怎么設(shè)計(jì)O/R映射,在性能和對(duì)象模型之間如何權(quán)衡,以及怎樣用好Hibernate需要具有很強(qiáng)的經(jīng)驗(yàn)和能力才行。

Hibernate對(duì)象/關(guān)系映射能力強(qiáng),數(shù)據(jù)庫(kù)無(wú)關(guān)性好

總之,按照用戶的需求在有限的資源環(huán)境下只要能做出維護(hù)性、擴(kuò)展性良好的軟件架構(gòu)都是好架構(gòu),所以框架只有適合才是最好。



1.概念:

Hibernate :Hibernate是一個(gè)開放源代碼的對(duì)象關(guān)系映射框架,它對(duì)JDBC進(jìn)行了非常輕量級(jí)的對(duì)象封裝,使得Java程序員可以隨心所欲的使用對(duì)象編程思維來(lái)操縱數(shù)據(jù)庫(kù)著力點(diǎn)對(duì)象與對(duì)象之間關(guān)系,自動(dòng)生成SQL。

Mybatis:MyBatis 本是apache的一個(gè)開源項(xiàng)目iBatis, 2010年這個(gè)項(xiàng)目由apache software foundation 遷移到了google code,并且改名為MyBatis 。Mybatis著力于POJO與SQL之間的映射關(guān)系

Spring Data:Spring Data是一個(gè)用于簡(jiǎn)化數(shù)據(jù)庫(kù)訪問(wèn),并支持云服務(wù)的開源框架。其主要目標(biāo)是使得對(duì)數(shù)據(jù)的訪問(wèn)變得方便快捷,并支持map-reduce框架和云計(jì)算數(shù)據(jù)服務(wù)。

2.開發(fā)的難度:

Hibernate的開發(fā)難度要大于Mybatis、Spring Data。主要是由于Hibernate封裝了完整的對(duì)象關(guān)系映射機(jī)制,以至于內(nèi)部的實(shí)現(xiàn)比較復(fù)雜、龐大,學(xué)習(xí)周期較長(zhǎng)。
Mybatis 主要依賴于SQL的編寫與ResultMap的映射。
Spring Data易上手,通過(guò)命名規(guī)范、注解查詢簡(jiǎn)化查詢操作。


3.查詢區(qū)別:

簡(jiǎn)單查詢:Hibernate 提供了基礎(chǔ)的查詢方法,也可以根據(jù)具體的業(yè)務(wù)編寫相應(yīng)的SQL(HQL);

Mybatis需要手動(dòng)編寫SQL語(yǔ)句,Spring Data 繼承基礎(chǔ)接口,可使用內(nèi)置的增刪改查方法。

高級(jí)查詢:Hibernate通過(guò)對(duì)象映射機(jī)制,開發(fā)者無(wú)需關(guān)心SQL的生成與結(jié)果映射,專注業(yè)務(wù)流程;Mybatis需要通過(guò)手動(dòng)在XML文件中編寫SQL語(yǔ)句以及ResultMap或者注解,Spring Data 提供了命名規(guī)范查詢和注解查詢更簡(jiǎn)便的編寫想要的SQL。

4.數(shù)據(jù)庫(kù)的擴(kuò)展性:

Hibernate與數(shù)據(jù)庫(kù)具體的關(guān)聯(lián)都在XML中,所以HQL對(duì)具體是用什么數(shù)據(jù)庫(kù)并不是很關(guān)心。

Mybatis由于所有SQL都是依賴數(shù)據(jù)庫(kù)書寫的,所以擴(kuò)展性,遷移性比較差。

Spring Data 與數(shù)據(jù)具體的關(guān)聯(lián)可以通過(guò)命名規(guī)范查詢、注解查詢,無(wú)需關(guān)心數(shù)據(jù)庫(kù)的差異,但是通過(guò)本地化SQL查詢的話,就不易擴(kuò)展。

5.緩存機(jī)制:


相同點(diǎn):Hibernate和Mybatis的二級(jí)緩存除了采用系統(tǒng)默認(rèn)的緩存機(jī)制外,都可以通過(guò)實(shí)現(xiàn)你自己的緩存或?yàn)槠渌谌骄彺娣桨?#xff0c;創(chuàng)建適配器來(lái)完全覆蓋緩存行為。

不同點(diǎn):Hibernate的二級(jí)緩存配置在SessionFactory生成的配置文件中進(jìn)行詳細(xì)配置,然后再在具體的表-對(duì)象映射中配置是那種緩存。

MyBatis的二級(jí)緩存配置都是在每個(gè)具體的表-對(duì)象映射中進(jìn)行詳細(xì)配置,這樣針對(duì)不同的表可以自定義不同的緩存機(jī)制(命名空間)。并且Mybatis可以在命名空間中共享相同的緩存配置和實(shí)例,通過(guò)Cache-ref來(lái)實(shí)現(xiàn)。

Spring Data 可以通過(guò)自己的緩存或者第三方緩存方案,配置滿足自己業(yè)務(wù)需要的緩存行為。


6.查詢方式:
Hibernate查詢:
?.1.HQL??--->from Admin as admin where admin.name =:name 使用命名參數(shù),僅使用與Hiberante框架

?2.Criteria---->對(duì)象化查詢 Criteria c = getSession().Criteria(Admin.class)

? ?c.add(Restrictions.eq("aname",name));//eq是等于,gt是大于,lt是小于,or是或
???c.add(Restrictions.eq("apassword", password));

3.DetachedCriteria----->動(dòng)態(tài)分離查詢

4.例子查詢-Example.create(user).list()

5.sql查詢

Query q = s.createSQLQuery("select * from user").addEntity(User.class);

6.命名查詢:Query q = getSession().getNamedQuery(“getUserByID”);


Mybatis查詢:

l 定義xml例如;userMapper.xml

l 定義接口userMapper 定義相關(guān)的方法 不必編寫接口的實(shí)現(xiàn)類

l 通過(guò)mybatis內(nèi)部處理機(jī)制解析xml文件中的sql?

l 調(diào)用存儲(chǔ)過(guò)程 {call 存儲(chǔ)過(guò)程名}?


Spring Data查詢:


1.命名查詢,需要遵循Spring Data規(guī)范,例如findByUser、deleteById 等從右向左解析生成sql

2.注解查詢:@Query(“ql語(yǔ)句”)


7.總結(jié):


Hibernate 對(duì)數(shù)據(jù)庫(kù)提供了較為完整的封裝,封裝了基本的DAO層操作,有較好的數(shù)據(jù)庫(kù)移植性

Mybatis 可以進(jìn)行更細(xì)致的SQL優(yōu)化,查詢必要的字段,但是需要維護(hù)SQL和查詢結(jié)果集的映射,而且數(shù)據(jù)庫(kù)的移植性較差,針對(duì)不同的數(shù)據(jù)庫(kù)編寫不同的SQL,

Spring Data JPA 極大的簡(jiǎn)化了數(shù)據(jù)庫(kù)訪問(wèn),可以通過(guò)命名規(guī)范、注解的方式較快的編寫SQL。

總結(jié)

以上是生活随笔為你收集整理的框架:Hibernate和Mybatis的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。