Saya bertanya-tanya apakah ada cara yang lebih elegan untuk melakukan IN () query dengan Spring's JDBCTemplate. Saat ini saya melakukan sesuatu seperti itu:
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());
}
Yang cukup menyakitkan karena jika saya memiliki sembilan baris hanya untuk membangun klausa untuk permintaan IN (). Saya ingin memiliki sesuatu seperti substitusi parameter pernyataan yang disiapkan
WHERE NOT EXISTS (SELECT ...)
.Saya melakukan kueri "in clause" dengan spring jdbc seperti ini:
sumber
Jika Anda mendapatkan pengecualian untuk: Jenis kolom tidak valid
Silakan gunakan
getNamedParameterJdbcTemplate()
sebagai gantigetJdbcTemplate()
Perhatikan bahwa dua argumen kedua ditukar.
sumber
Lihat di sini
tulis kueri dengan parameter bernama, gunakan sederhana
ListPreparedStatementSetter
dengan semua parameter secara berurutan. Cukup tambahkan cuplikan di bawah ini untuk mengonversi kueri dalam bentuk tradisional berdasarkan parameter yang tersedia,sumber
Banyak hal berubah sejak 2009, tetapi saya hanya dapat menemukan jawaban yang mengatakan Anda perlu menggunakan NamedParametersJDBCTemplate.
Bagi saya itu berfungsi jika saya hanya melakukan a
menggunakan SimpleJDBCTemplate atau JDBCTemplate
sumber
listeParamsForInClause
tidak akan melarikan diri dan membuat Anda rentan terhadap injeksi SQL.