Java、JPA 與預存程序互動:比較
Java 應用程式可以使用多種方法與預存程序進行互動;本文重點介紹 JPA 和 CallableStatement
,比較它們的方法、優點和 SQL 語法。
JPA 和 CallableStatement
:詳細查看
JPA 2.1 引入了預存程序呼叫支援。 與 CallableStatement
不同,JPA 透過自動處理參數映射來簡化流程,從而產生更乾淨、更易於維護的程式碼。
預存程序呼叫:SQL 語法
要使用 JPA 呼叫 getEmployeeDetails
預存程序,請使用下列 SQL:
<code class="language-sql">{call getEmployeeDetails(?,?)}</code>
?
佔位符代表輸入參數(此處為 employeeId
和 companyId
)。
說明性 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 最佳實務
{call sp_name(?,?)}
.resultSetMapping
或指定結果類別。 重要注意事項
JPA 的預存程序呼叫能力與 CallableStatement
相比有其限制。 具體來說,不支援直接存取 OUT 參數,且不允許傳回多個結果集。
以上是在 Java 中呼叫預存程序時,JPA 和 CallableStatement 有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!