MysqlクエリでjdbcTemplateを使用してIN句でリスト値を渡したいのですが。以下のように、
List<Long> listId= new ArrayList<>();
listId.add(1234L);
listId.add(1235L);
listId.add(1236L);
String type ="A";
List<BojoClass> result = new ArrayList<>();
String sql="select column1,column2 from table where columName in(?)"
result = jdbcTemplate.query(sql, new Object[]{listId}, new BeanPropertyRowMapper<BojoClass>(BojoClass.class));
これを最善の方法で達成するにはどうすればよいですか?
NamedParameterJdbcTemplate
が役立つかもしれません。
あなたのサンプルについては、これを試してください:)
NamedParameterJdbcTemplate jdbcTemplate = ...
List<Long> listId= new ArrayList<>();
listId.add(1234L);
listId.add(1235L);
listId.add(1236L);
String sql="select column1,column2 from table where columName in(:ids)";
List<BojoClass> result = new ArrayList<>();
Map idsMap = Collections.singletonMap("ids", listId);
result = jdbcTemplate.query(sql, idsMap, ParameterizedBeanPropertyRowMapper.newInstance(BojoClass.class));
編集:
DataSource
を取得できる場合は、次のようなコンストラクターでNamedParameterJdbcTemplate
オブジェクトを初期化できます。
NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate.getDataSource());
リストをStringUtils.join(paramListForInClause, ",");
と結合して、必要な文字列を生成できます