MyBatis XML에 정수 목록을 전달하여 MySQL 쿼리의 in 절에 사용하려면 어떻게해야합니까?MyBatis 'IN'절의 목록
파일의 쿼리와 함께 Java 7, MySQL 5.6 DB 및 MyBatis 3.0.4를 사용하고 있습니다.
현재이 정수 목록을 문자열로 변환하고 문자열 대체 (${}
연산자)를 사용하여 'IN'절에 값을 넣습니다. 예상대로 작동하지만이 방법은 매개 변수를 Injection에 취약하게 만듭니다 .
나는 <foreach>
요소를 사용해 보았지만 어떤 속성을 지정해야 할지를 알 수 없습니다.
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);
}
매퍼 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>
요소에 대해 지정하는 속성이 무엇인지 알아낼 수 아니다 - 나는 계속 # {index}의 값에 대해 NullPointerException을 실행합니다.
<foreach>
요소의 올바른 사용법을 이해할 수 있습니까?
편집 : 아래
는 스택 추적이, 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)의 샘플입니다. '! –
bub
당신의 스트립퍼 아이디가 null 또는 비어 있습니까? – Blank
아니요, strippperIds가 null/empty가 아니며 값이 있습니다. – bub