simplejdbctemplate والمعلمات null
-
18-09-2019 - |
سؤال
أنا أستخدم SimpleJDBCTEMPLate و Mapsqlparametersource في الطريقة المغلقة:
MapSqlParameterSource parameterSource = new MapSqlParameterSource();
parameterSource.addValue("typeId", typeId, Types.BIGINT);
List<Long> ids = _jdbcTemplate.query(_selectIdByParameters, new EntityIdRowMapper(), parameterSource);
متي typeId
(وهو Long
) يكون null
, ، ثم يبدو الاستعلام بالطريقة التالية:
SELECT id FROM XXX WHERE typeId = null
في حين أتوقع أن تولد
SELECT id FROM XXX WHERE typeId IS NULL
لقد قمت ذكرت هذه المسألة وكان الاستجابة ذلك
سيتعين عليك تقديم بيان SQL المناسب بناء على معلمات الاستعلام الخاصة بك.
ونتيجة لذلك، يتم تناثر التعليمات البرمجية الخاصة بي بشيكات فارغة.
هل هناك طريقة أكثر أناقة للتعامل مع المعلمات الخالية المرسلة إلى SimpleJdbcTemplate
?
المحلول
لديهم نقطة - JDBCTEMPLATE ليس مترجم SQL، فإنه يحل محل النائفي الخاص بك.
أقترح عليك بناء جملةك باستخدام طريقة فائدة، وقنصتها على سلسلة الاستعلام:
String createNullCheckedClause(String column, Object value) {
String operator = (value == null ? "is" : "=");
return String.format("(%s %s ?)", column, operator);
}
...
String query = "select * from table where " + createNullCheckedClause("col", x);
ليست جميلة جدا. بدلا من ذلك، ربما يمكنك تكوين MySQL للسماح "= NULL"، لكنني لا أعتقد أن هذا خيار.
لا تنتمي إلى StackOverflow