Comment exécuter EN() les requêtes SQL avec le Printemps JDBCTemplate effectivly?
Je me demandais si il ya un moyen plus élégant de faire EN() les requêtes avec le Printemps JDBCTemplate. Actuellement je fais quelque chose comme ça:
StringBuilder jobTypeInClauseBuilder = new StringBuilder();
for(int i = 0; i < jobTypes.length; i++) {
Type jobType = jobTypes[i];
if(i != 0) {
jobTypeInClauseBuilder.append(',');
}
jobTypeInClauseBuilder.append(jobType.convert());
}
Qui est assez douloureux car si j'ai neuf lignes seulement pour la construction de la clause de la() DE la requête. Je voudrais avoir quelque chose comme le paramètre de substitution des déclarations préparées
Vous devez vous connecter pour publier un commentaire.
Vous souhaitez un paramètre source:
Cela ne fonctionne que si
getJdbcTemplate()
renvoie une instance de typeNamedParameterJdbcTemplate
WHERE NOT EXISTS (SELECT ...)
.Map<String,List<Objects>>
pourList<Foo>
que dans votre réponse . mon QuestionJe ne l' "de la section" requête avec spring jdbc comme ceci:
Si vous obtenez une exception pour : Invalid type de colonne
Veuillez utiliser
getNamedParameterJdbcTemplate()
au lieu degetJdbcTemplate()
Noter que les deux arguments sont inversées.
Reportez-vous à ici
écrire une requête avec des paramètres nommés, utilisation simple
ListPreparedStatementSetter
avec tous les paramètres dans l'ordre. Juste ajouter un extrait de code ci-dessous pour convertir la requête dans la forme traditionnelle, en fonction de paramètres disponibles,Beaucoup de choses ont changé depuis 2009, mais je ne peux que trouver des réponses disant que vous devez utiliser NamedParametersJDBCTemplate.
Pour moi ça fonctionne, si je fais juste un
à l'aide de SimpleJDBCTemplate ou JDBCTemplate
listeParamsForInClause
ne sera pas échappé et qui vous rend vulnérable à une injection SQL.