mybatis查询结果不对,mybatis foreach 判断
目录
foreach查询不出结果也不报错问题执行结果正确执行结果正确做法使用foreach、in操作注意点错误结构化查询语言示例改正后的结构化查询语言为
foreach查询不出结果也不报错问题
首先,执行的时候语法没有报错,其次结构化查询语言语句拿到数据库去执行能查到数据,但是在接口这边返回空输数据,查看控制台发现结构化查询语言语句执行了,但是返回结果为0。此时猜想是传入参数的问题。
执行结果
此时数组是直接从参数里接收
仔细看此时的数组和普通的数组还是有差别的
但是此时执行是没有问题的,但是查不到数据
正确执行结果
此时的数组
遍历输出
所以,由此可以看出是参数的问题
正确做法
由于接收到的数组是数据数组,不能直接使用,要转成普通数组即可
前端传入参数(数组即可)
使用foreach、in操作注意点
米巴提斯语法掌握不熟,在写为每一个操作时,造成在()错误,这种情况不符合结构化查询语言的语法,导致程序报错。
如果简单只做非空判断,这样也有可能会有问题:本来在一个空列表,应该是没有数据才对,却变成了获取全部数据!
错误sql示例
SELECT id= get activecount 结果类型= int 参数类型= com。新鲜小姐。活跃。dto。 SELECT count(1)FROM(SELECT distinct a . * FROM active AS a if test= SKU!= 和sku!=null LEFT JOIN active _ promotion AS AP ON AP。active _ id=a . id左加入promotion _ product为PP上的PP。promotion _ id=APpromotion _ id/if if test= areaIds!= 和areaIds!=null LEFT JOIN active _ area AS aa ON aa。active _ id=a . id且aa.status=1且aa.area_type=0 /if WHERE a.status![CDATA[!=]] 0 if test=id!=0和id!=null 和a.id=#{id} /if if test=name!= 和名称!=null "和类似CONCAT(% ,#{name}, %) /if if test=sku!= 和sku!=null 和pp.sku=#{sku} /if!-判断方式错了,应该先用空再用大小0判断;如果区域标识为空,查询结果也应为空,而不是其他查询结果。所以结构化查询语言有问题- if test=areaIds!= 和areaIds!=null 和aa。area _ id IN foreach item= item index= index collection= areaIds open=( separator=, close=) # { item }/foreach/if order by a . create _ time desc)as b/select
改正后的sql为
SELECT id= get activecount 结果类型= int 参数类型= com。新鲜小姐。活跃。dto。 SELECT count(1)FROM(SELECT distinct a . * FROM active AS a if test= SKU!= 和sku!=null LEFT JOIN active _ promotion AS AP ON AP。active _ id=a . id左加入promotion _ product为PP上的PP。promotion _ id=APpromotion _ id/if if test= areaIds!= 和areaIds!=null LEFT JOIN active _ area AS aa ON aa。active _ id=a . id且aa.status=1且aa.area_type=0 /if WHERE a.status![CDATA[!=]] 0 if test=id!=0和id!=null 和a.id=#{id} /if if test=name!= 和名称!=null "和类似CONCAT(% ,#{name}, %) /if if test=sku!= 和sku!=null 和PP。SKU=# { SKU }/if if test= areaIds!foreach item= item index= index collection= areaIds open=( separator=, close=) #{item} /foreach /if!-加入这个非真条件- if test=areaIds==null或areaIds.size==0 且1=0/如果由a . create _ time desc订购)作为b/select以上为个人经验,希望能给大家一个参考,也希望大家多多支持盛行它。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。