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

NHibernate 預存程序進階應用(下):sql-query 靈活查詢、標量/實體/參數多樣化

     編輯:關於.NET

sql-query 三大進階場景

1. 回傳標量值

預存程序:

CREATE PROCEDURE scalarSProcs @number int AS
SELECT @number as value, 'YJingLee' as name

映射:

<sql-query name="ScalarSProcs">
  <return-scalar column="value" type="int"/>
  <return-scalar column="name" type="string"/>
  exec scalarSProcs :number
</sql-query>

呼叫:session.GetNamedQuery("ScalarSProcs").SetInt32("number", 22).List() → 回傳 object[] { 22, "YJingLee" }。

2. 參數綁定兩種寫法

  • 位置參數:exec paramSProcs ?, ? → .SetInt64(0, 10L).SetInt64(1, 20L)
  • 混合:exec paramSProcs ?, :second → .SetInt64(0, 10L).SetInt64("second", 20L)

3. 實體查詢

預存程序查詢 Customer 實體:

<sql-query name="EntitySProcs">
  <return class="DomainModel.Entities.Customer,DomainModel"/>
  exec entitySProcs :customerId
</sql-query>

注意:原文嘗試用 <return-property> 映射欄位但在作者機器失敗,簡化為僅 <return class=.../> 即可工作(需欄位名與屬性名一致)。

呼叫:session.GetNamedQuery("EntitySProcs").SetInt32("customerId", 1).UniqueResult<Customer>()。

4. 單一屬性查詢

只需特定欄位時,用標量方式:

<sql-query name="SingleEntitySProcs">
  <return-scalar column="Firstname" type="string"/>
  exec singleEntitySProcs
</sql-query>

拾遺補充

  • 預存程序查詢無法使用 SetFirstResult/SetMaxResults 分頁
  • 參數順序**必須**與持久化類別屬性順序一致
  • 預存程序加 SET NOCOUNT ON 可能提升效能
  • 類別映射可用 <loader query-ref="EntitySProcs"/> 自訂載入邏輯
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved