文档章节

Mybatis in查询传入字符串参数问题

小致Daddy
 小致Daddy
发布于 2018/12/21 14:13
字数 339
阅读 119
收藏 1

今天使用mybatis遇到一个sql查询的问题,在这里记录一下: 
情景:

SELECT
            g.id,
            g.`name`,
            g.code,
            g.cid_list    as cidList,
            g.brief_text,
            g.brief_image,
            g.`image`,
            g.group_type,
            g.add_time,
            g.status,
            gs.`name`     as specName,
            sg.id         as sgId,
            sg.price      as price,
            gc.course_id  as courseId,
            gc.course_uri as courseUri
        FROM
            cxg_goods g
                LEFT JOIN cxg_spec_goods sg ON sg.goods_id = g.id
                LEFT JOIN cxg_goods_spec gs ON gs.id = sg.spec_id
                LEFT JOIN cxg_goods_course gc ON gc.goods_id = g.id
        WHERE
            g.id in (#{cidList})
          AND g.`status` = 1

当时结果只显示了一个出来,而预期结果应该是10个才对。仔细查看了日志:

确实有正确传入参数,怎么返回结果就一个呢? 
经过一番查询资料,最后整理如下:

当参数采用:#{} : 解析为一个 JDBC 预编译语句(prepared statement)的参数标记符,一个 #{ } 被解析为一个参数占位符 。${}: 仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换。

也就是说我们实际的sql语句变成了类似:
 

WHERE
        g.id in (
            '2,3,4,6,10,11'
        ) 
        AND g.`status` = 1

此时自然不是我们想要的查询结果,修改sql语句为:

WHERE
            g.id in (${_parameter})
          AND g.`status` = 1

达到了我们想要的效果,记住无论参数名是啥,都要改成”_parameter”

© 著作权归作者所有

小致Daddy

小致Daddy

粉丝 187
博文 556
码字总数 594227
作品 0
济南
技术主管
私信 提问
Mybatyis foreache 中的BUG

标签在Mybatis的xml配置中使用集合,主要是用到了foreach动态语句。 foreach的参数: foreach元素的属性主要有 item,index,collection,open,separator,close。 item表示集合中每一个元素...

ahpome
2018/10/26
100
0
mybatis传入参数为0被误认为是空字符串的解决方法

在mbatis中使用Xml配置sql语句时,出现了这样一个问题。当我传入的参数为0去做判断时,mybatis会把参数0当成是空字符串去判断而引起查询结果错误。下面是我之前配置的sql语句: <if test="ov...

码代码的小司机
2018/11/19
25
0
springboot项目中遇到的bug

启动项目的时候报错 情形一 解决方法: 在yml配置文件中加入,因为默认的话是 情形二 在集成mybatis时mapper包中的类没被扫描 解决方法: 在springboot的启动类中加入 或者直接在Mapper类上面...

ben4
2017/05/20
0
0
关于mybatis中llike模糊查询中#和$的使用

在mybatis中经常要写到like 查询,以前从来没有遇到什么问题,突然遇到一个问题,找了好长时间没找到,最后找到了,是关于#和$的使用的,总结如下: name like 表达式 and falg=#{falg} 本次示例中共...

u010398771
2017/04/25
0
0
Mybatis中#{}和${}传参的区别及#和$的区别小结

最近在用mybatis,之前用过ibatis,总体来说差不多,不过还是遇到了不少问题,再次记录下, 比如说用#{},和 ${}传参的区别, 使用#传入参数是,sql语句解析是会加上"",比如 select * from ...

必须往前走
01/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

无回路有向图的拓扑排序

因公司业务需要,在表单中每个字段都会配置自动计算,但自动计算公式中会引用到其他字段中的值。所以希望可以根据计算公式,优先计算引用的公式。所以最终使用了无回路有向图的扩扑排序来实现...

兜兜毛毛
40分钟前
3
0
如何抢占云栖大会C位?史上最强强强攻略来了

点击观看视频: APSARA云栖大会开发者情怀 原文链接 本文为云栖社区原创内容,未经允许不得转载。

阿里云官方博客
53分钟前
5
0
Kubernetes 从懵圈到熟练:集群服务的三个要点和一种实现

作者 | 声东 阿里云售后技术专家<br /> 文章来源:Docker,点击查看原文。 <br />以我的经验来讲,理解 Kubernetes 集群服务的概念,是比较不容易的一件事情。尤其是当我们基于似是而非的理解...

阿里巴巴云原生
57分钟前
7
0
PHP7.3的新特性

2018年12月6日,PHP7.3正式版发布,在PHP7.2基础上进行了大量错误修复和安全优化,性能提升10%! 从目前的更新说明来看,PHP 7.3 并不是一个主打新特性的版本,包含更多的是 bug 修复。PHP 7...

迅睿CMS-PHP开源CMS程序
今天
7
0
Tomcat 应用中并行流带来的类加载问题

本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/f-X3n9cvDyU5f5NYH6mhxQ 作者:肖铭轩、王道环 随着 Java8 的不断流行,越来越多的开发人员使用并行流(parallel)...

vivo互联网技术
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部