Как передать Integer List в MyBatis XML, который будет использоваться в предложении in в моем MySQL-запросе?Списки в разделе MyBatis 'IN'
Я использую Java 7, MySQL 5.6 DB и MyBatis 3.0.4 с запросами в файле .
В настоящее время я преобразовываю этот список целых чисел в строку и используя строчную подстановку (оператор ${}
), чтобы поместить значения в предложение «IN» - в то время как он работает так, как ожидается, этот подход оставляет уязвимым параметр Injection ,
Я попытался использовать элемент <foreach>
, но я не могу определить, какие атрибуты указать.
Ниже приведен пример кода Java:
public List<Stripper> getStripperDetails(String club, List<Integer> stripperIds) {
Map<String, Object> input = new HashMap<>();
input.put("club", club);
input.put("stripperIds", stripperIds);
return stripClubMapper.getStripperDetails(input);
}
Mapper XML:
<select id="getStripperDetails" parameterType="java.util.HashMap" resultMap="StripperMap">
SELECT STRIPPER_ID, STAGE_NAME, REAL_NAME, CLUB FROM EXOTIC_DANCERS WHERE CLUB = #{club} AND STRIPPER_ID IN
<foreach item="item" index="index" collection="stripperIds" open="(" separator="," close=")">
#{index}
</foreach>
</select>
Я не в состоянии выяснить, какие атрибуты, чтобы указать для <foreach>
элемента - Я держу работая в NullPointerException для значения в # {index}.
Не могли бы вы помочь мне понять правильное использование элемента ?
Edit:
@ 10086,
Ниже трассировки стека:
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: java.lang.NullPointerException
### The error may involve com.stripclub.mapper.stripClubMapper.getStripperDetails-Inline
### The error occurred while setting parameters
### Cause: java.lang.NullPointerException
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:67) ~[mybatis-spring-1.0.0-RC3.jar:1.0.0-RC3]
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:345) ~[mybatis-spring-1.0.0-RC3.jar:1.0.0-RC3]
at com.sun.proxy.$Proxy208.selectList(Unknown Source) ~[na:na]
at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:193) ~[mybatis-spring-1.0.0-RC3.jar:1.0.0-RC3]
at org.apache.ibatis.binding.MapperMethod.executeForList(MapperMethod.java:85) ~[mybatis-3.0.4.jar:3.0.4]
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:65) ~[mybatis-3.0.4.jar:3.0.4]
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:38) ~[mybatis-3.0.4.jar:3.0.4]
at com.sun.proxy.$Proxy209.getTransactionIds(Unknown Source) ~[na:na]
Я проверил несколько взаимосвязанных вопросов, таких как [** этот **] (http://stackoverflow.com/questions/18388936/how-to-iterate-through- hashmap-in-mybatis-foreach? lq = 1), но я не могу понять, что указать для атрибутов foreach. Ниже приведен образец из [** dtd **] (http://mybatis.org/dtd/mybatis-3-mapper.dtd). '<ЭЛЕМЕНТ Еогеасп! (#PCDATA | включают | обрезки | где | набор | Еогеасп | выбрать |, если | связывать) *>! ' –
bub
Является ли ваш stripperIds на карте пустым или пустым? – Blank
Нет, stripperIds не имеет значения null/empty, он имеет значения. – bub