myabtis 数字+逗号 传参问题 $和#

大家好,我是烤鸭:


    遇到一个maybatis传参的问题。
    如果传参是数字+逗号的形式,比如1,2,3,4,5。

 

问题复现:

项目中查询sql和navicat查询sql结果不一致。

1    项目中:

如图所示,查到一条数据。

可以看到上面设置进去的参数是String类型的,也就是 IN ('1,2,3,4,5')。很显然,这不是我们想要的。

2.    navicat中:

同样的sql复制到navicat里,是5条。

 

3.     查找原因:

为什么会有这个问题呢。 为了找问题,将传入的参数写死是没有问题的。

问题在于#符号,#是先生成sql,后采用占位符的方式,将参数放进去。


4.    解决方式:

知道问题就比较好改了,将#换成$就可以了。

$是在sql生成时,把参数传入sql中。#是在sql后,将参数生成到占位符上。
这篇文章从源码角度说了两者的区别。

http://www.importnew.com/25791.html

$的第二种写法,更麻烦了,没必要:

<select id="selectByFlowIds" resultType="PreAuthorizeHnydExpendFlow">SELECT<include refid="preAuthorizeHnydExpendFlowColumns"/>FROM pre_authorize_hnyd_expend_flow aWHERE 1 = 1AND FIND_IN_SET(a.expend_id, #{flowIds})<if test="flowIds != null and flowIds!= ''">AND a.expend_id IN<foreach collection="flowIds.split(',')" item="flowId" index="index" open="(" close=")" separator=",">'#{flowId}'</foreach></if>
</select>

但是我们都知道$会有sql注入的风险,用#改写这个,采用mysql的FIND_IN_SET函数。

<select id="selectByFlowIds" resultType="PreAuthorizeHnydExpendFlow">SELECT<include refid="preAuthorizeHnydExpendFlowColumns"/>FROM pre_authorize_hnyd_expend_flow aWHERE 1 = 1AND FIND_IN_SET(a.expend_id, #{flowIds})
</select>

总结一下:

来源: 

https://www.cnblogs.com/friends-wf/p/4227999.html

mybatis中的#和$的区别

#相当于对数据 加上 双引号,$相当于直接显示数据

1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id".
  
2. $将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id,  如果传入的值是id,则解析成的sql为order by id.
  
3. #方式能够很大程度防止sql注入。
  
4.$方式无法防止Sql注入。

5.$方式一般用于传入数据库对象,例如传入表名.
  
6.一般能用#的就别用$.

MyBatis排序时使用order by 动态参数时需要注意,用$而不是#

字符串替换
默认情况下,使用#{}格式的语法会导致MyBatis创建预处理语句属性并以它为背景设置安全的值(比如?)。这样做很安全,很迅速也是首选做法,有时你只是想直接在SQL语句中插入一个不改变的字符串。比如,像ORDER BY,你可以这样来使用:
ORDER BY ${columnName}
这里MyBatis不会修改或转义字符串。

重要:接受从用户输出的内容并提供给语句中不变的字符串,这样做是不安全的。这会导致潜在的SQL注入攻击,因此你不应该允许用户输入这些字段,或者通常自行转义并检查。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/412858.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot上传文件到本服务器 目录与jar包同级

前言 看标题好像很简单的样子&#xff0c;但是针对使用jar包发布SpringBoot项目就不一样了。 当你使用tomcat发布项目的时候&#xff0c;上传文件存放会变得非常简单&#xff0c;因为你可以随意操作项目路径下的资源。但是当你使用SpringBoot的jar包发布项目的时候&#xff0c;…

JS判断是否是科学计算结果并处理

var re 505899.24- 495991.61- 9907.63;var test1 /\d(?:.(\d*))?e([-]\d)/.test(re);alert("是否是科学计算结果:"test1);var test2 re.toFixed(10)-0;alert("处理后的结果&#xff1a;" test2 );

[css] css怎样使每个字符宽度一样?

[css] css怎样使每个字符宽度一样&#xff1f; 控制字符间距&#xff1a;letter-spacing:1em;[em,px,rem]个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe

大家好&#xff0c;我是烤鸭&#xff1a; 又是采坑实录。 异常如下&#xff1a; org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipeat org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:356)at org.ap…

[css] word-wrap、word-break和white-space有什么区别?

[css] word-wrap、word-break和white-space有什么区别&#xff1f; word-wrap标明是否允许浏览器再单词内进行断句normal 只允许在断字点换行 默认值break-word 在长单词或这url地址内部进行换行word-break标明怎么样进行单词内的断句normal 默认值break-all 允许在单词内换行k…

Redis免费客户端 Another Redis DeskTop Manager 下载地址及安装教程

下载及安装教程地址&#xff1a;GitHub - qishibo/AnotherRedisDesktopManager: &#x1f680;&#x1f680;&#x1f680;A faster, better and more stable redis desktop manager [GUI client], compatible with Linux, Windows, Mac. Whats more, it wont crash when loadi…

[css] 说说你对字母“X“在CSS中有什么作用?

[css] 说说你对字母"X"在CSS中有什么作用&#xff1f; 可以用作关闭按钮叉叉X的底部与文本对齐的基线位置相同个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面…

JavaScript文字转图片

非常感谢这位博主提供的代码&#xff0c;以下只做代码记录 博文转载地址&#xff1a;https://blog.csdn.net/qq_30100043/article/details/76549377//绘制文字到canvas&#xff0c;判断换行位置&#xff0c;和设置canvas高度 function canvasWrapText(options) {var settings …

mysql 内置功能 函数 date_format函数

创建数据库db12 create database db12 charsetutf8; use db12; 准备表和记录 CREATE TABLE blog (id INT PRIMARY KEY auto_increment,NAME CHAR (32),sub_time datetime ); 插入记录 INSERT INTO blog (NAME, sub_time) VALUES(第1篇,2015-03-01 11:31:21),(第2篇,2015-03-11 …

低版本webview无法请求jquery ajax

大家好&#xff0c;我是烤鸭&#xff1a; 又来踩坑了。 1. 场景复现 有反馈我们的H5页面&#xff0c;无法正确显示页面。就类似下图这样&#xff0c;ajax没法请求到数据。 之前测试的时候是在web端做的测试&#xff0c;用安卓7.0和8.0的手机都试了一下&#xff0c;是没…

[css] CSS3中的transition是否可以过渡opacity和display?

[css] CSS3中的transition是否可以过渡opacity和display&#xff1f; transition过渡display是有一个前提条件: 浏览器渲染是在每一帧的最后&#xff0c;每一帧都会执行以下操作:js执行2.style加持3.layout4.paint5.composite在js执行过程中&#xff0c; 遇到DOM操作&#xff…

Ubuntu 无法应用原保存的显示器配置

Ubuntu开机之后页面出现&#xff1a;无法应用原保存的显示器配置所选模式均不匹配可能的模式&#xff1a;为 CRTC 63 尝试模式CRTC 63&#xff1a;尝试 800x60060Hz 模式输出在 1366x76860Hz (通过 0)CRTC 63&#xff1a;尝试 2560x160060Hz 模式输出在 1366x76860Hz (通过 0)C…

由excel导出引起的cpu 100% 和gc 的问题

大家好&#xff0c;我是烤鸭&#xff1a; 记一次 由excel导出 导致的cpu飙升200%&#xff0c;jvm 内存不足。 1. 场景复现 前端页面导出Excel&#xff0c;之前导出4,5W条数据都没什么问题的。 今天业务突然反馈说导出不了了&#xff0c;我试着导出了2w数据&#xff0…

[css] 说下background-color:transparent和opacity:0的区别是什么?

[css] 说下background-color:transparent和opacity:0的区别是什么&#xff1f; background-color:transparent: 只是把背景色设置为透明&#xff0c;并不会影响元素中的内容。可以利用 transparent 进行三角、扇形的设置。opacity: 0: 会影响整个元素&#xff0c;元素的内容也会…

win11耳机和扬声器怎么分开控制音量?

win11耳机和扬声器怎么分开控制音量&#xff1f; 有时候有这种需求&#xff0c;在办公位置工作听耳机&#xff0c;拔掉耳机后&#xff0c;扬声器需要自动禁止声音 1&#xff0c;搜索并打开Realtek Audio Console 2&#xff0c;点击左下角“设备高级设置”&#xff0c;播放设备…

ngix莫名挂掉 signal process started

大家好&#xff0c;我是烤鸭&#xff1a; 又到了采坑实录。ngix莫名挂掉 error.log一直出现 signal process started 查看了access.log和error.log access.log&#xff1a; 43.245.218.208 - - [06/Jan/2019:18:08:43 0800] "GET / HTTP/1.1" 200 555 "-"…

[css] z-index有时不起作用的原因是什么?怎么解决?

[css] z-index有时不起作用的原因是什么&#xff1f;怎么解决&#xff1f; 根元素 (HTML),z-index 值不为 "auto"的 绝对/相对定位&#xff0c;一个 z-index 值不为 "auto"的 flex 项目 (flex item)&#xff0c;即&#xff1a;父元素 display: flex|inline…

Docker安装nacos

docker安装nacos docker创建nacos容器 第一种&#xff08;不推荐&#xff0c;因为不能连接数据库&#xff0c;进行持久化&#xff09; #搜索可以使用的镜像 docker search nacos #拉取镜像 docker pull nacos/nacos-server# 运行nacos docker run \ --name nacos -d \ -p …

HttpsURLConnection 返回 400

大家好&#xff0c;我是烤鸭&#xff1a; 记一次 由 HttpsURLConnection 引起的返回值400的错误。 1. 场景复现 今天线上调用第三方接口的时候突然报错了。 严格来说也不是报错&#xff0c;就是发的请求不通了&#xff0c;http报400的错误。 问了下对接方&…

[css] 你有了解css计数器(序列数字字符自动递增)吗?如何通过css的content属性实现呢?

[css] 你有了解css计数器&#xff08;序列数字字符自动递增&#xff09;吗&#xff1f;如何通过css的content属性实现呢&#xff1f; counter-reset:设置计数器 counter-reset: count 0 /* 计数器从1开始 */ counter-increment: 递增数值 counter-increment: count 2 /* 用于c…