mybatis使用foreach查询不出结果也不报错的问题
作者:HYDMonster 发布时间:2023-11-24 22:36:17
标签:mybatis,foreach,查询结果
foreach查询不出结果也不报错问题
首先,执行的时候语法没有报错,其次sql语句拿到数据库去执行能查到数据,但是在接口这边返回空输数据,查看控制台发现sql语句执行了,但是返回结果为0。此时猜想是传入参数的问题。
执行结果
此时数组是直接从参数里接收
仔细看此时的数组和普通的数组还是有差别的
但是此时执行是没有问题的,但是查不到数据
正确执行结果
此时的数组
遍历输出
所以,由此可以看出是参数的问题
正确做法
由于接收到的数组是json数组,不能直接使用,要转成普通数组即可
前端传入参数(数组即可)
使用foreach、in操作注意点
mybatis语法掌握不熟,在写foreach操作时,造成in ()错误,这种情况不符合SQL的语法,导致程序报错。
如果简单只做非空判断,这样也有可能会有问题:本来in一个空列表,应该是没有数据才对,却变成了获取全部数据!
错误sql示例
<select id="getActiveCount" resultType="int" parameterType="com.missfresh.active.dto.ActiveSearchDTO">
select count(1) from (
SELECT
distinct a.*
FROM
active AS a
<if test="sku!='' and sku!=null">
LEFT JOIN active_promotion AS ap ON ap.active_id = a.id
LEFT JOIN promotion_product AS pp ON pp.promotion_id = ap.promotion_id
</if>
<if test="areaIds!='' and areaIds!=null">
LEFT JOIN active_area AS aa ON aa.active_id = a.id and aa.status = 1 and aa.area_type = 0
</if>
WHERE a.status <![CDATA[!= ]]> 0
<if test="id!=0 and id!=null">
AND a.id = #{id}
</if>
<if test="name!='' and name!=null">
AND a.name LIKE CONCAT('%',#{name},'%')
</if>
<if test="sku!='' and sku!=null">
AND pp.sku = #{sku}
</if>
<!--判断方式错了,应该先用null再用size>0判断;如果areaIds为空,查询结果也应为空,而不是其他查询结果。所以sql有问题-->
<if test="areaIds!='' and areaIds!=null">
and 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="getActiveCount" resultType="int" parameterType="com.missfresh.active.dto.ActiveSearchDTO">
select count(1) from (
SELECT
distinct a.*
FROM
active AS a
<if test="sku!='' and sku!=null">
LEFT JOIN active_promotion AS ap ON ap.active_id = a.id
LEFT JOIN promotion_product AS pp ON pp.promotion_id = ap.promotion_id
</if>
<if test="areaIds!='' and areaIds!=null">
LEFT JOIN active_area AS aa ON aa.active_id = a.id and aa.status = 1 and aa.area_type = 0
</if>
WHERE a.status <![CDATA[!= ]]> 0
<if test="id!=0 and id!=null">
AND a.id = #{id}
</if>
<if test="name!='' and name!=null">
AND a.name LIKE CONCAT('%',#{name},'%')
</if>
<if test="sku!='' and sku!=null">
AND pp.sku = #{sku}
</if>
<if test="areaIds!=null and areaIds.size > 0">
and aa.area_id IN
<foreach item="item" index="index" collection="areaIds" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<!--加入这个非真条件-->
<if test="areaIds==null or areaIds.size == 0">
and 1=0
</if>
order by a.create_time desc ) as b
</select>
来源:https://blog.csdn.net/HYDMonster/article/details/87909731
0
投稿
猜你喜欢
- Java基础面试题及答案集锦(基础题122道,代码题19道),具体详情如下所示:1、面向对象的特征有哪些方面1.抽象:抽象就是忽略一个主题中
- 在上一篇文章《驱动开发:内核字符串转换方法》中简单介绍了内核是如何使用字符串以及字符串之间的转换方法,本章将继续探索字符串的拷贝与比较,与应
- 按照官方文档进行的配置:快速开始|mybatis-plus引入依赖:<!-- 引入mybatisPlus --> &
- 一. SpringBoot中实现Session共享1. 创建web项目我们按照之前的经验,创建一个web程序,并将之改造成Spring Bo
- 通过子类调用父类的变量,有两种方法:1、把父类的变量设置成public:package triangle.opengl.wlz.stu.ch
- 闲来无事,用C++做了一个图书管理系统,主要有借书、还书、图书管理、用户管理等功能,主要用到的技术有容器和文件,以及类的封装#include
- 前言 因为自己在做的一个小软件里面需要用到从A-Z排序的ListView,所以自然而然的想到了微信的联系人,我想要的就是那样的效果。本来没
- 相信不少喜欢开发的朋友都已经知道微信小程序是个什么物种了,楼主也是从小程序内测期间就开始关注,并且也写过几个已经上线的微信小程序。但是基本上
- 前言最近在刷java面试题偶然看到这类问题(try/finally中含有return时的执行顺序),觉得挺有意思于是小小的研究了一下,希望经
- C++对string进行大小写转换操作方法方法一:使用C语言之前的方法,使用函数,进行转换#include <iostream>
- Android ListView的Item点击效果的定制
- 6.0的手机对于写入手机需要申请权限的我做了如下处理下面我贴出代码package com.example.admin.sdapplicati
- Failed to execute goal org.apache.maven.plugins:maven-resources-plugin
- 这篇文章主要介绍了Java数组索引异常产生及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友
- 如下所示:JSONArray jsonArray1 = jsonObject.getJSONArray("result"
- 前言本文主要给大家介绍的是java虚拟机的故障处理工具,文中提到这些工具包括:名称主要作用jpsJVM process Status Too
- 附GitHub源码:WebViewExplore一、WebView的基础配置WebSettings ws = getSettings();w
- 最近在开发项目的时候遇到一个问题,在myecilpes上使用googlede gson读取项目中的json文件成功,然后把项目发布到tomc
- 目录环境准备1.数据库操作1.1获取所有数据库1.2获取指定库的所有集合名1.3.删除数据库2.文档操作2.1插入文档2.2查询文档2.3分
- 年纪大了,以前做过的东西过阵子还是会忘,今天使用jenkins持续集成工具时用到了eclipse上传新maven工程至svn,上传完毕后改了