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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

框架:Hibernate和Mybatis的区别

發布時間:2025/3/21 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 框架:Hibernate和Mybatis的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Mybatis和hibernate不同,

Mybatis不完全是一個ORM框架,因為MyBatis需要程序員自己編寫Sql語句,不過mybatis可以通過XML或注解方式靈活配置要運行的sql語句,并將java對象和sql語句映射生成最終執行的sql,最后將sql執行的結果再映射生成java對象。


Mybatis學習門檻低,簡單易學,程序員直接編寫原生態sql,可嚴格控制sql執行性能,靈活度高,非常適合對關系數據模型要求不高的軟件開發,例如互聯網軟件、企業運營類軟件等,因為這類軟件需求變化頻繁,一但需求變化要求成果輸出迅速。但是靈活的前提是mybatis無法做到數據庫無關性,如果需要實現支持多種數據庫的軟件則需要自定義多套sql映射文件,工作量大(因為每一中SQL的語法有些不同)

mybatis無法做到數據庫無關性

Hibernate對象/關系映射能力強,數據庫無關性好,對于關系模型要求高的軟件(例如需求固定的定制化軟件)如果用hibernate開發可以節省很多代碼,提高效率。但是Hibernate的學習門檻高,要精通門檻更高,而且怎么設計O/R映射,在性能和對象模型之間如何權衡,以及怎樣用好Hibernate需要具有很強的經驗和能力才行。

Hibernate對象/關系映射能力強,數據庫無關性好

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



1.概念:

Hibernate :Hibernate是一個開放源代碼的對象關系映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數據庫著力點對象與對象之間關系,自動生成SQL。

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

Spring Data:Spring Data是一個用于簡化數據庫訪問,并支持云服務的開源框架。其主要目標是使得對數據的訪問變得方便快捷,并支持map-reduce框架和云計算數據服務。

2.開發的難度:

Hibernate的開發難度要大于Mybatis、Spring Data。主要是由于Hibernate封裝了完整的對象關系映射機制,以至于內部的實現比較復雜、龐大,學習周期較長。
Mybatis 主要依賴于SQL的編寫與ResultMap的映射。
Spring Data易上手,通過命名規范、注解查詢簡化查詢操作。


3.查詢區別:

簡單查詢:Hibernate 提供了基礎的查詢方法,也可以根據具體的業務編寫相應的SQL(HQL);

Mybatis需要手動編寫SQL語句,Spring Data 繼承基礎接口,可使用內置的增刪改查方法。

高級查詢:Hibernate通過對象映射機制,開發者無需關心SQL的生成與結果映射,專注業務流程;Mybatis需要通過手動在XML文件中編寫SQL語句以及ResultMap或者注解,Spring Data 提供了命名規范查詢和注解查詢更簡便的編寫想要的SQL。

4.數據庫的擴展性:

Hibernate與數據庫具體的關聯都在XML中,所以HQL對具體是用什么數據庫并不是很關心。

Mybatis由于所有SQL都是依賴數據庫書寫的,所以擴展性,遷移性比較差。

Spring Data 與數據具體的關聯可以通過命名規范查詢、注解查詢,無需關心數據庫的差異,但是通過本地化SQL查詢的話,就不易擴展。

5.緩存機制:


相同點:Hibernate和Mybatis的二級緩存除了采用系統默認的緩存機制外,都可以通過實現你自己的緩存或為其他第三方緩存方案,創建適配器來完全覆蓋緩存行為。

不同點:Hibernate的二級緩存配置在SessionFactory生成的配置文件中進行詳細配置,然后再在具體的表-對象映射中配置是那種緩存。

MyBatis的二級緩存配置都是在每個具體的表-對象映射中進行詳細配置,這樣針對不同的表可以自定義不同的緩存機制(命名空間)。并且Mybatis可以在命名空間中共享相同的緩存配置和實例,通過Cache-ref來實現。

Spring Data 可以通過自己的緩存或者第三方緩存方案,配置滿足自己業務需要的緩存行為。


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

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

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

3.DetachedCriteria----->動態分離查詢

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 定義相關的方法 不必編寫接口的實現類

l 通過mybatis內部處理機制解析xml文件中的sql?

l 調用存儲過程 {call 存儲過程名}?


Spring Data查詢:


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

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


7.總結:


Hibernate 對數據庫提供了較為完整的封裝,封裝了基本的DAO層操作,有較好的數據庫移植性

Mybatis 可以進行更細致的SQL優化,查詢必要的字段,但是需要維護SQL和查詢結果集的映射,而且數據庫的移植性較差,針對不同的數據庫編寫不同的SQL,

Spring Data JPA 極大的簡化了數據庫訪問,可以通過命名規范、注解的方式較快的編寫SQL。

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。