java - 使用mybatis查询db记录列表导致: An unexpected token "IN" was found following

标签 java sql mybatis

知道 mybatis 映射器可能有什么问题吗?

手动运行此 SQL,我得到了预期的结果..

SELECT * FROM TABLE_NAME WHERE ID = '304ed0ea-07c1-4261-bb0f-b44036f285e6' AND RUN_ID IN ('be7e0d61-bdb4-4341-ab35-fd5007e99e58');

SQL 在我的映射器 xml 中看起来是一样的..

<select id="selectByIdAndRunIds" parameterType="java.util.HashMap" resultMap="result">
  SELECT * FROM TABLE_NAME
  WHERE ID = #{id} AND RUN_ID IN
  <foreach item="item" collection="runIds" open="(" separator="," close=")">
      #{item}
  </foreach>
</select>

Java ..

public List<SomeObject> selectByIdAndRunIds(final String id, final List<String> runIds) {
    SqlSession session = MyBatisSqlSession.getInstance().getSqlSessionFactory().openSession(true);

    Map<String, Object> input = new HashMap<>();
    input.put("id", id);
    input.put("runIds", runIds);

    List<SomeObject> result = session.selectList("selectByIdAndRunIds", input);

    session.close();
    return result;
}

这是我得到的错误:

### Error querying database.
Cause: com.ibm.db2.jcc.am.SqlSyntaxErrorException: 
An unexpected token "IN" was found following "= ? AND RUN_ID".  
Expected tokens may include:  "<boolean_factor>".. 
SQLCODE=-104, SQLSTATE=42601, DRIVER=4.24.92

最佳答案

runIds 是一个空列表,即 runIds.size() == 0

添加了如果runIds.size() == 0则不执行查询的逻辑

关于java - 使用mybatis查询db记录列表导致: An unexpected token "IN" was found following,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56957002/

相关文章:

java - 如何在java中解码base64

java - mybatis是否可以在oracle中插入所有并返回序列(useGenerateKeys)?

java - Mybatis 在 spring 中使用 xml 配置返回大结果

java - hibernate中每组最大n个

java - Google Appengine Java - 从图像获取 EXIF 数据

java - ConcurrentHashMap线程安全

mysql - 如何选择不同行的两个字段?

mysql - group by 语句中的多个字段

java - JOOQ 解析 orderBy 和 orderDirection 以与 dslcontext 一起使用

java - mybatis+oracle,程序卡在插入上