Mybatis-plus foreach拼接字符串查询无数据返回问题
作者:轻点 发布时间:2022-09-26 17:29:02
foreach拼接字符串查询无数据返回
Mybatis-plus xml使用foreach遍历查询条件,填充IN函数时,查询不到数据
入参 List<String>[A,B,C,D,E,F]
WHERE sku_code IN
<foreach collection="listHistoryBrowseDateVO.list" item="skuCode" index="index" open="(" close=")"
separator=",">
#{skuCode}
</foreach>
以上代码在迭代器中,给IN函数赋值的时候,使用的是#{ }占位符号,最后解析出的sql是:
WHERE sku_code IN (A,B,C,D,E,F)不符合IN函数填充查询格式。
两种解决方式
1、将入参处理为: String ‘A’,‘B’,‘C’,‘D’,‘E’,‘F’,然后使用占位符 WHERE sku_code IN (#{}) 直接填充
2、入参处理为:List [ ‘A’,‘B’,‘C’,‘D’,‘E’,‘F’],使用迭代器+拼接符${}
入参 List<String> [ 'A','B','C','D','E','F']
WHERE sku_code IN
<foreach collection="listHistoryBrowseDateVO.list" item="skuCode" index="index" open="(" close=")"
separator=",">
${skuCode}
</foreach>
Mybatis-plus #{} 占位符,${}拼接符,在sql解析的时是有区别的
精讲#{}和${}的区别是什么?
经常碰到这样的面试题目:#{}和${}的区别是什么?
网上的答案是:
#{}是预编译处理,${}是字符串替换。mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;mybatis在处理${}时,就是把${}替换成变量的值。使用#{}可以有效的防止SQL注入,提高系统安全性。
对于这个问题我感觉要抓住两点
(1)$符号一般用来当作占位符,常使用Linux脚本的人应该对此有更深的体会吧。既然是占位符,当然就是被用来替换的。知道了这点就能很容易区分$和#,从而不容易记错了。
(2)预编译的机制。预编译是提前对SQL语句进行预编译,而其后注入的参数将不会再进行SQL编译。我们知道,SQL注入是发生在编译的过程中,因为恶意注入了某些特殊字符,最后被编译成了恶意的执行操作。而预编译机制则可以很好的防止SQL注入。
最后想说的是,对于mybatis以及sql而言,每一个考点背后都是有一个深刻的思想存在的,应该好好的体会。这样才能真正的做到技术提升,成为技术大牛。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
来源:https://blog.csdn.net/loney_wolf/article/details/108050212


猜你喜欢
- 实现android双击后退键退出当前APP功能实现该功能基本思路是,1, 监听后退键 , 比较两次后退间隔 , 低于两秒则出发退出2, 退出
- 在算法面试中,面试官总是喜欢围绕链表、排序、二叉树、二分查找来做文章,而大多数人都可以跟着专业的书籍来做到倒背如流。而面试官并不希望招收的是
- 前言在项目中一般使用使用volley方式如下,用起来给人一种很乱的感觉,于是一种盘它的想法油然而生。public void get() {S
- 下面将源代码贴出。 public static class ChineseToPinYin { private static readonl
- 在AS中进行NDK开发之前,我们先来简单的介绍几个大家都容易搞懵的概念: &
- 写在前面Activity是Android四大组件之一,用于直接跟用户进行交互,本篇文章将介绍Activity的启动流程。用户启动Activi
- 本文为大家分享了C# 7.0中的解构功能,供大家参考,具体内容如下解构元组C#7.0新增了诸多功能,其中有一项是新元组(ValueTuple
- 本文实例为大家分享了Java实现斗地主的具体代码,供大家参考,具体内容如下import java.util.ArrayList;import
- 这个窗口是右下角提示小窗口,主要用于提示。private void btnStartNotification_Click(object se
- 目录简介springfox大致原理:SpringBoot整合Swagger2引入依赖编写配置类配置SwaggerSwagger2常用注解使用
- 本文实例讲述了Android开发判断一个app应用是否在运行的方法。分享给大家供大家参考,具体如下:在一个应用中,或一个Service 、R
- Springmvc+hibernate成为现在很多人用的框架整合,最近自己也在学习摸索,由于我们在开发项目中很多项目都用到列表分页功能,在此
- 一、概述SPI(Service Provider Interface),是Java内置的一种服务提供发现机制,可以用来提高框架的扩展性,主要
- 本地jvm执行flink带web ui使用StreamExecutionEnvironment executionEnvironment =
- 前言RxJava 在 GitHub 主页上的自我介绍是 "a library for composing asynchronous
- 读取resources下文件的方法网上有问答如下:问:new FileInputStream("src/main/resource
- 这篇文章主要介绍了SpringBoot多模块项目框架搭建过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 1.简介if判断语句是很多编程语言的重要组成部分。但是,若我们最终编写了大量嵌套的if语句,这将使得我们的代码更加复杂和难以维护。让我们看看
- 背景我们经常在网上下载一些视频教程,然而这些视频命名规则各不相同,即使对于相同类型的文件名来说,当文件数量很大且文件名全部是中文时,文件排序
- 本文实例讲述了java简单解析xls文件的方法。分享给大家供大家参考,具体如下:读取:import java.io.*;import jxl