###前提・実現したいこと
MyBatis Mapper XMLでIN句に、foreachを適用したところ、
複数のパラメータが、1つのパラメーターとなってしまい、
select文の検索が正しく行えません。複数のパラメータを
複数のパラメータのままで、prepared statementを作成したいですができないでしょうか。
###該当のソースコード
業務にかかわる部分は修正しています。
<mapper namespace="SoshikiDao"> <resultMap id="Dssks100DtoMap" type="SoshikiMap"> <result column="AAA" jdbcType="CHAR" property="aaa" /> <result column="BBB" jdbcType="CHAR" property="bbb" /> <result column="CCC" jdbcType="CHAR" property="ccc" /> </resultMap> <select id="selectSoshiki" resultMap="SoshikiMap" parameterType="SoshikiDto"> select * from SOSHIKI <where> <if test="soshikiKbList != null and soshikiKbList.size() > 0"> and SOSHIKI_KB in <foreach collection="soshikiKbList" item="soshikiKb" index="index" open="(" close=")" separator=","> #{soshikiKb} </foreach> </if> </where> </select>
上記のMapper.xmlを設定して、SoshikiDao.SoshikiDao(SoshikiDto dto)を実行したところ、dto.soshikKbListには、D,Hの2個の要素があるにもかかわらず、1つにまとまって('D,H')、prepared statementに設定しているようです。
where soshiki_kb in ('D','H')としたいところが、where soshiki_kb in ('DH')になっている?
<<実行結果ログ>>
[DEBUG] 2016-07-09 13:55:18,281 - org.apache.ibatis.logging.jdbc.BaseJdbcLogger ==> Preparing: select AAA,BBB,CCC from SOSHIKI WHERE SOSHIKI_KB in ( ? )
[DEBUG] 2016-07-09 13:55:18,281 - org.apache.ibatis.logging.jdbc.BaseJdbcLogger ==> Parameters: D,H(String)
[DEBUG] 2016-07-09 13:55:18,281 - org.apache.ibatis.logging.jdbc.BaseJdbcLogger <== Total: 0
###補足情報(言語/FW/ツール等のバージョンなど)
mybatis 3.2.8
maybatis-spring 1.2.5
struts2-core 2.3.28
Spring 4.1.9

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。