当前位置: 首页 > 知识库问答 >
问题:

MyBatis-使用IN运算符时返回空值

岳曦
2023-03-14

我有如下疑问,

<select id="getTableName" resultType="java.lang.String" parameterType="java.lang.String">
    Select Distinct TableName From TABLE_COLUMN_MAPPING Where COLUMNNAME IN (#{columnNames})
</select> 

我通过如下传递值来调用服务方法。

sampleService.getTableName("'BANKRM','APPLICANTID','APPLICANTTYPE','APPLICANTTYPE','TOTAL','SCQUES9'");

但它回来了。。。[]

帮助我为什么我没有得到值,而是得到了空列表。

附言:我检查了日志,它的语句是创建的,没有任何问题

2013-03-22 19:16:27,521 DEBUG [main] org.apache.ibatis.datasource.pooled.PooledDataSource (debug:27) - Created connection 23845098.
2013-03-22 19:16:27,590 DEBUG [main] java.sql.Connection (debug:27) - ooo Connection Opened
2013-03-22 19:16:27,670 DEBUG [main] java.sql.PreparedStatement (debug:27) - ==>  Executing: Select Distinct TableName From Config_FieldDetails Where COLUMNNAME IN (?) 
2013-03-22 19:16:27,670 DEBUG [main] java.sql.PreparedStatement (debug:27) - ==> Parameters: 'BANKRM','APPLICANTID','APPLICANTTYPE','APPLICANTTYPE','TOTAL','SCQUES9'(String)
2013-03-22 19:16:27,954 DEBUG [main] java.sql.Connection (debug:27) - xxx Connection Closed
2013-03-22 19:16:27,955 DEBUG [main] org.apache.ibatis.datasource.pooled.PooledDataSource (debug:27) - Returned connection 23845098 to pool.
2013-03-22 19:16:27,955 INFO [main] com.hcl.cob.mybatis.bpm.service.impl.COBBPMCommonServiceImpl (getTableNameFromConfigFieldDetails:41) - getTableNameFromConfigFieldDetails(String columnName) -- End

共有2个答案

萧明贤
2023-03-14

如果要放置将用于创建PreparedStatement的参数(不传递参数),应使用符号:

${columnNames}
闻人树
2023-03-14

将列名列表放在一个列表参数中,然后将其传递给查询:

List<String> columnNames = Arrays.asList(["BANKRM", "APPLICANTID", "APPLICANTTYPE", "APPLICANTTYPE","TOTAL","SCQUES9"]); 
sampleService.getTableName(columnNames);

然后更新查询以获取列表,并使用foreach标记迭代列表值,并将其放入in子句中:

<select id="getTableName" resultType="java.lang.String" parameterType="java.util.List">
    Select Distinct TableName From TABLE_COLUMN_MAPPING Where COLUMNNAME IN 
        <foreach item="columnName" index="index" collection="columnNames" open="(" separator="," close=")">
            #{columnName}
        </foreach>
</select>  
 类似资料:
  • 问题内容: 我有三张桌子: 文字:行中的文字 trigram:所有文字行的trigram text_trigram:文本行包含的三字母组,中间表 当我执行此命令时: 结果出来了,却没有我想要的结果: 这是我除了拥有的东西: 此外,我想执行以下操作: 有可能的?还是使用运算符是错误的? 问题答案: 我认为这里的困惑是您假设的值为null ,但实际上 没有匹配的行 。考虑以下简化版本: 如果没有带有的

  • 我正在开发一个返回算术表达式的程序,其中包括运算符和整数。我为其实现的代码如下: 这段代码的问题是它返回运算符,但表达式中的所有运算符都是相同的:例如:我得到一个表达式9 2 3 4 5=?我不想让它全部包含,它可以是一个表达式中的许多随机运算符。任何帮助都将不胜感激。谢谢

  • 问题内容: 我有一个名为NUMS的表,其中只有n列。 然后在其中填充值1,2,3,4,5,null。 现在查询 在这种情况下,我想它已转换为 我也在比较n和一个应该产生未知值的null值,它应该返回一个空集。但是它返回1,2(null不返回,尽管包含在IN运算符中) 现在查询 …转换为: 在这里,我上面所说的有效,并且不返回任何内容。 任何人都可以详细解释发生了什么。 问题答案: 好,我找到了答案

  • 问题内容: 对于百万分之一的时间,我希望使用Java中的运算符,类似于SQL中的运算符。它可以作为编译器语法糖来实现。所以这 …真的很棒。实际上,以上内容与此处相当冗长的(且不适用于原始类型)构造相同: 或针对,和类似的类型: 也许会有更有效的实现。 题: 这样的东西会成为Java 8的一部分吗?如果没有,我该如何提出建议?还是我现在可以使用任何等效的构造? 问题答案: 使用op4j: 使用相同的

  • 问题内容: 我有下面的SQL,但无法正常工作 产品类别是婴儿礼物篮,关键字字段是婴儿礼物篮,婴儿礼物 基本上想在关键字列表中找到product_category时获得sub_category? 问题答案: 您将需要使用 使用规范化的数据库结构,这将更加容易和高效。(您当前在单个列中包含多个关键字的结构违反了第一个范式)

  • 注意:此枚举仅用于演示。我实际上并没有混合数字和字符串,但这比编写两个枚举来显示错误要容易得多。 现在,在我的代码中,我希望检查枚举中是否有特定的值,但是,当检查字符串s时,它总是为false 我检查了编译后的代码,这就是它的样子