web-dev-qa-db-ja.com

jdbcTemplateを使用してIN句でリストパラメータを渡す方法

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));

これを最善の方法で達成するにはどうすればよいですか?

8
MMMMS

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());
12
Blank

リストをStringUtils.join(paramListForInClause, ",");と結合して、必要な文字列を生成できます

1
luso