سؤال

أنا أستخدم 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"، لكنني لا أعتقد أن هذا خيار.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top