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

Hibernate 3 學習筆記(十):原生 SQL 查詢與自定義 CRUD 語句

     編輯:Java 相關知識

原生 SQL 查詢(SQLQuery)

Hibernate 允許直接編寫 SQL,通過 SQLQuery 接口執行,並支持實體映射別名 {entity.*} 自動映射列。示例:查詢年齡 > 20 的用戶。

映射文件配置

<sql-query name="com.hb3.pack_01.model.User.SQLQueryUser">
    <![CDATA[
    select {user.*} from User user where user.age > :age
    ]]>
    <return alias="user" class="com.hb3.pack_01.model.User"/>
</sql-query>

代碼調用

// 方式一:動態 SQL
String sql = "select {user.*} from User user where user.age > ?";
SQLQuery sqlQuery = session.createSQLQuery(sql);
sqlQuery.setParameter(0, 20);
sqlQuery.addEntity("user", User.class);
List users = sqlQuery.list();

// 方式二:命名查詢
Query query = session.getNamedQuery("com.hb3.pack_01.model.User.SQLQueryUser");
query.setInteger("age", 20);
List users = query.list();

自定義 INSERT/UPDATE/DELETE

在 <class> 節點下定義 <sql-insert>、<sql-update>、<sql-delete> 覆蓋 Hibernate 自動生成的語句。

映射配置

<class name="User" table="user">
    <id name="id" column="id"><generator class="native"/></id>
    <property name="name"/>
    <property name="age"/>
    
    <sql-insert>INSERT INTO user VALUES (?, ?)</sql-insert>
    <sql-update>UPDATE user SET name=?, age=? WHERE id=?</sql-update>
    <sql-delete>DELETE FROM user WHERE id=?</sql-delete>
</class>

注意:參數順序必須與映射屬性聲明順序一致(主鍵通常在最後)。

驗證測試

User user = new User();
user.setName("yanfeng");
user.setAge(21);

Transaction tx = session.beginTransaction();
session.save(user);  // 執行自定義 INSERT
tx.commit();

控制台輸出確認:Hibernate: insert into user (name, age) values (?, ?)

最佳實踐建議

  • 優先使用 HQL/JPQL 保持可移植性
  • 僅在性能調優、存儲過程調用、特定數據庫特性時使用原生 SQL
  • 自定義 CRUD 需嚴格維護參數順序,建議充分測試
  • 命名查詢集中管理,便於維護與優化
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved