带有IN条件的MyBatis问题<带有List的Map中的foreach

我必须使用MyBatis构建IN条件,其中必须传递基于下面的foreach循环获得的PARENT_VALUES列表….

我试过但无法解决这个问题。 我不确定

通过的值是:

 Map input = new HashMap(); input.put("somedata"); List inConditionList = new ArrayList(); inConditionList.add("P1"); inConditionList.add("P2"); input.put(inConditionList); sqlSessionTemplate.selectList("getNameAgeDetails", input); 

必需的SQL:

  SELECT P.NAME, P.AGE FROM PERSON_DETAILS P WHERE SOMECOLUMN is NULL AND DATA IN (SELECT DATA FROM PARENT_TABLE WHERE PARENT_VALUE IN ("P1, "P2")) ORDER BY P.NAME FETCH FIRST 10 ROW ONLY 

MyBatis Mapper SQL:

  <![CDATA[ SELECT P.NAME, P.AGE FROM PERSON_DETAILS P WHERE SOMECOLUMN is NULL AND DATA IN (SELECT DATA FROM PARENT_TABLE WHERE PARENT_VALUE IN  ${item}   ) ORDER BY P.NAME FETCH FIRST 10 ROW ONLY ]]>  

下面是我尝试运行Unit TestCases时遇到的错误:

 ### The error occurred while setting parameters ### SQL: SELECT P.NAME, P.AGE FROM PERSON_DETAILS P WHERE SOMECOLUMN is NULL AND DATA IN (SELECT DATA FROM PARENT_TABLE WHERE PARENT_VALUE IN  ?  ### Cause: com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=PARENT_VALUE IN <foreach it;TION WHERE;, DRIVER=3.63.75 ; bad SQL grammar []; nested exception is com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=PARENT_VALUE IN 

你的Select语句会喜欢这样的东西

  

我同意Karthik Prasad的意见,如果你删除CDATA并且有类似的话

 a_column>=6 AND b_column<10 

您必须执行XML转义,如下所示:

 a_column >= 6 AND b_column < 10