JPA、Hibernate、Mybatis的區別
4.查詢區別:
簡單查詢:Hibernate 提供了基礎的查詢方法,也可以根據具體的業務編寫相應的SQL;
Mybatis需要手動編寫SQL語句,Spring Data 繼承基礎介面,可使用內建的增刪改查方法。
高階查詢:Hibernate通過物件對映機制,開發者無需關心SQL的生成與結果對映,專注業務流程;Mybatis需要通過手動在XML檔案中編寫SQL語句以及ResultMap或者註解,Spring Data 提供了命名規範查詢和註解查詢更簡便的編寫想要的SQL。
5.資料庫的擴充套件性:
Hibernate與資料庫具體的關聯都在XML中,所以HQL對具體是用什麼資料庫並不是很關心。
Mybatis由於所有SQL都是依賴資料庫書寫的,所以擴充套件性,遷移性比較差。
Spring Data 與資料具體的關聯可以通過命名規範查詢、註解查詢,無需關心資料庫的差異,但是通過本地化SQL查詢的話,就不易擴充套件。
6.快取機制:
相同點:Hibernate和Mybatis的二級快取除了採用系統預設的快取機制外,都可以通過實現你自己的快取或為其他第三方快取方案,建立介面卡來完全覆蓋快取行為。
不同點:Hibernate的二級快取配置在SessionFactory生成的配置檔案中進行詳細配置,然後再在具體的表-物件對映中配置是那種快取。
MyBatis的二級快取配置都是在每個具體的表
.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。
ORM框架的使用需要根據具體的專案業務選擇更適合的技術方案,而不能一味地為了技術而技術。