Interaction Java, JPA et procédures stockées : une comparaison
Les applications Java peuvent interagir avec les procédures stockées en utilisant plusieurs méthodes ; cet article se concentre sur JPA et CallableStatement
, en comparant leurs approches, leurs avantages et la syntaxe SQL.
JPA et CallableStatement
: un aperçu détaillé
JPA 2.1 a introduit la prise en charge des appels de procédure stockée. Contrairement à CallableStatement
, JPA simplifie le processus en gérant automatiquement le mappage des paramètres, conduisant à un code plus propre et plus maintenable.
Invocation de procédure stockée : syntaxe SQL
Pour appeler la getEmployeeDetails
procédure stockée avec JPA, utilisez ce SQL :
<code class="language-sql">{call getEmployeeDetails(?,?)}</code>
Les espaces réservés ?
représentent les paramètres d'entrée (ici, employeeId
et companyId
).
Exemple illustratif de JPA
Cet extrait de code illustre la fonctionnalité d'appel de procédure stockée de 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
Approche
En revanche, CallableStatement
nécessite l'enregistrement et l'exécution manuels des paramètres :
<code class="language-java">CallableStatement cstmt = connection.prepareCall("{call getEmployeeDetails(?,?)}"); cstmt.setInt(1, employeeId); cstmt.setInt(2, companyId); ResultSet rs = cstmt.executeQuery();</code>
Bonnes pratiques JPA
{call sp_name(?,?)}
.resultSetMapping
ou spécifiez une classe de résultats.Considérations importantes
Les capacités d'appel de procédure stockée de JPA ont des limites par rapport à CallableStatement
. Plus précisément, l'accès direct aux paramètres OUT n'est pas pris en charge et le renvoi de plusieurs jeux de résultats n'est pas autorisé.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!