Zastanawiałem się, czy istnieje bardziej elegancki sposób wykonywania zapytań IN () za pomocą JDBCTemplate Springa. Obecnie robię coś takiego:
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());
}
Co jest dość bolesne, ponieważ mam dziewięć wierszy tylko do zbudowania klauzuli dla zapytania IN (). Chciałbym mieć coś takiego jak podstawianie parametrów przygotowanych wyciągów
WHERE NOT EXISTS (SELECT ...)
.Wykonuję zapytanie „in clause” z spring jdbc w ten sposób:
źródło
Jeśli otrzymasz wyjątek dla: Nieprawidłowy typ kolumny
Użyj
getNamedParameterJdbcTemplate()
zamiastgetJdbcTemplate()
Zwróć uwagę, że dwa drugie argumenty są zamienione miejscami.
źródło
Zobacz tutaj
napisz zapytanie z nazwanym parametrem, użyj prostego
ListPreparedStatementSetter
ze wszystkimi parametrami w kolejności. Wystarczy dodać poniższy fragment, aby przekonwertować zapytanie w formie tradycyjnej na podstawie dostępnych parametrów,źródło
Wiele rzeczy zmieniło się od 2009 roku, ale mogę znaleźć tylko odpowiedzi mówiące, że musisz użyć NamedParametersJDBCTemplate.
U mnie działa, jeśli po prostu zrobię
przy użyciu SimpleJDBCTemplate lub JDBCTemplate
źródło
listeParamsForInClause
nie zostanie przedostana i naraża Cię na wstrzyknięcie SQL.