首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

HibernateTemplate 核心用法詳解:從 CRUD 到進階查詢

     編輯:Java 相關知識

簡介

HibernateTemplate 是 Spring 封裝 Hibernate 操作的核心範本類,封裝了 Session 管理、異常轉換、事務整合等樣板代碼,提供豐富的查詢與持久化方法。雖 Spring 3.1+ 建議直接使用 SessionFactory.getCurrentSession(),但大量存量專案仍在使用,掌握其用法對維護至關重要。

常用查詢方法全景

1. 基礎 HQL 查詢

// 無參查詢
List<User> users = template.find("from User");

// 單參數查詢
List<User> users = template.find("from User u where u.name = ?", "test");

// 多參數查詢(陣列)
List<User> users = template.find(
    "from User u where u.name = ? and u.password = ?",
    new Object[]{"test", "123"}
);

2. 命名參數查詢(可讀性更強)

// 單命名參數
String hql = "from User u where u.name = :name";
List<User> users = template.findByNamedParam(hql, "name", "xiyue");

// 多命名參數
String hql = "from User u where u.name = :name and u.password = :pwd";
String[] paramNames = {"name", "pwd"};
Object[] values = {"xiyue", "123"};
List<User> users = template.findByNamedParam(hql, paramNames, values);

3. 範例查詢(QBE 模式)

User example = new User();
example.setName("bb");
example.setPassword("123");
// 等同於 where name='bb' AND password='123'
List<User> users = template.findByExample(example);

// 支援分頁
List<User> users = template.findByExample(example, 0, 10); // 首頁 10 條

注意:findByExample 僅支援等值 AND 條件,不支援 OR、範圍等複雜查詢。

持久化操作速查

方法說明對應 Hibernate 原生
save(entity)持久化瞬時對象session.save()
update(entity)更新游離對象session.update()
saveOrUpdate(entity)根據 ID 判斷新增/更新session.saveOrUpdate()
delete(entity)刪除持久化對象session.delete()
get(clazz, id)立即載入session.get()
load(clazz, id)延遲載入(代理)session.load()

關鍵對比:getHibernateTemplate() vs getSession()

getHibernateTemplate() —— Spring 管理模式(推薦)

  • 自動參與 Spring 聲明式事務
  • 自動處理 Session 開啟/關閉/異常轉換
  • 繼承 HibernateDaoSupport 即可獲得

getSession() —— 原生模式

  • 需手動管理 Session 生命週期(openSession()/close())
  • 不自動綁定事務,需自行協調
  • 適合需要精細控制 Session 的高級場景

遷移提示:Spring 3.1+ 已棄用 HibernateTemplate,新專案建議直接注入 SessionFactory 使用 getCurrentSession(),配合 @Transactional 實現更簡潔的事務管理。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved