首頁 >資料庫 >mysql教程 >在 Java 中呼叫預存程序時,JPA 和 CallableStatement 有何不同?

在 Java 中呼叫預存程序時,JPA 和 CallableStatement 有何不同?

Patricia Arquette
Patricia Arquette原創
2025-01-16 11:54:59835瀏覽

How Do JPA and CallableStatement Differ When Calling Stored Procedures in Java?

Java、JPA 與預存程序互動:比較

Java 應用程式可以使用多種方法與預存程序進行互動;本文重點介紹 JPA 和 CallableStatement,比較它們的方法、優點和 SQL 語法。

JPA 和 CallableStatement:詳細查看

JPA 2.1 引入了預存程序呼叫支援。 與 CallableStatement 不同,JPA 透過自動處理參數映射來簡化流程,從而產生更乾淨、更易於維護的程式碼。

預存程序呼叫:SQL 語法

要使用 JPA 呼叫 getEmployeeDetails 預存程序,請使用下列 SQL:

<code class="language-sql">{call getEmployeeDetails(?,?)}</code>

? 佔位符代表輸入參數(此處為 employeeIdcompanyId)。

說明性 JPA 範例

此程式碼片段示範了 JPA 的預存程序呼叫功能:

<code class="language-java">Query query = em.createNativeQuery("{call getEmployeeDetails(?,?)}", EmployeeDetails.class)
                .setParameter(1, employeeId)
                .setParameter(2, companyId);

List<EmployeeDetails> result = query.getResultList();</code>

CallableStatement接近

相較之下,CallableStatement需要手動註冊參數並執行:

<code class="language-java">CallableStatement cstmt = connection.prepareCall("{call getEmployeeDetails(?,?)}");
cstmt.setInt(1, employeeId);
cstmt.setInt(2, companyId);
ResultSet rs = cstmt.executeQuery();</code>

JPA 最佳實務

  • 建議參數索引;命名參數可能無法一致地運作。
  • 將 SQL 語句括在大括號中:{call sp_name(?,?)}.
  • 對於結果集,定義 resultSetMapping 或指定結果類別。

重要注意事項

JPA 的預存程序呼叫能力與 CallableStatement 相比有其限制。 具體來說,不支援直接存取 OUT 參數,且不允許傳回多個結果集。

以上是在 Java 中呼叫預存程序時,JPA 和 CallableStatement 有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn