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

Hibernate 3 學習筆記(四):CRUD 核心操作與動態 SQL 技巧

     編輯:Java 相關知識

基本 CRUD 操作實戰

Hibernate 的核心價值在於簡化數據庫操作。以下代碼演示了最基礎的增、刪、改、查流程:

Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();

// 1. 新增
User user = new User();
user.setName("chenyan");
session.save(user);           // 執行 INSERT
tx.commit();

// 2. 立即查詢(get 會立即發 SQL)
user = (User) session.get(User.class, user.getId());
System.out.println(user.getAge());  // 輸出 null(age 未設置)

// 3. 更新
user.setAge(24);
tx = session.beginTransaction();
session.update(user);         // 執行 UPDATE
tx.commit();

// 4. 載入
user = (User) session.load(User.class, user.getId());
System.out.println(user.getAge());  // 輸出 24

// 5. 刪除
tx = session.beginTransaction();
session.delete(user);         // 執行 DELETE
tx.commit();

動態 SQL:dynamic-insert 與 dynamic-update

在類映射上啟用這兩個屬性,能讓 Hibernate 根據對象屬性值動態生成 SQL,提升性能並減少無效字段更新:

<class name="com.hb3.pack_01.model.User" table="user"
     dynamic-insert="true"
     dynamic-update="true">

效果對比:

  • 未啟用時:insert into user (name, age) values (?, ?) —— 即使 age 為 null 也包含在內
  • 啟用後:insert into user (name) values (?) —— 僅插入非空字段

同理,dynamic-update="true" 會使 UPDATE 語句僅包含真正被修改的字段(如 update user set age=? where id=?),避免覆蓋未變更的列。

查詢方式大全

1. Criteria API(面向對象查詢)

Criteria criteria = session.createCriteria(User.class);
// 查詢所有
List users = criteria.list();

// 條件查詢:name = 'shenbin'
// 注意:Hibernate 3.3+ 建議用 Restrictions 替代舊版 Expression
criteria.add(Restrictions.eq("name", "shenbin"));
users = criteria.list();

2. HQL(Hibernate Query Language)

// 簡單查詢
Query query = session.createQuery("from User");
users = query.list();

// 參數綁定查詢
query = session.createQuery("from User user where user.name like ?");
query.setParameter(0, "shenbin");  // 位置參數,從 0 開始
users = query.list();

關鍵遷移提示

在 Hibernate 3.3 及以上版本,org.hibernate.Expression 類已廢棄,請統一使用 org.hibernate.criterion.Restrictions 構建條件,確保代碼向後兼容。

總結

掌握 save/update/delete/get/load 五大核心方法,善用 dynamic-insert/update 優化 SQL,並熟練運用 Criteria 與 HQL 兩大查詢風格,即可應對絕大多數業務場景。下一篇將重點講解容易出錯的 saveOrUpdate() 方法。

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