博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mybatis的mapper文件中$和#的区别
阅读量:5325 次
发布时间:2019-06-14

本文共 767 字,大约阅读时间需要 2 分钟。

一般来说,我们使用mybatis generator来生成mapper.xml文件时,会生成一些增删改查的文件,这些文件中需要传入一些参数,传参数的时候,我们会注意到,参数的大括号外面,有两种符号,一种是#,一种是$。这两种符号有什么区别呢?

SELECT * FROM employee WHERE name=#{name}SELECT * FROM employee ORDER BY ${salary}

从上面的内容我们可以比较清楚的看到,一般#{}用于传递查询的参数,一般用于从dao层传递一个string或者其他的参数过来,mybatis对这个参数会进行加引号的操作,将参数转变为一个字符串。

比如,这边我们想根据姓名查询某个人的信息,我们会从dao传一个参数,比如jack过来,mybatis生成对应的sql为:

SELECT * FROM employee WHERE name="jack"

而$则不同,我们一般用于ORDER BY的后面。此时mybatis对这个参数不会进行任何的处理,直接生成sql语句。例如,此处我们传入salary作为参数,传入第二个中,此时,mybatis生成的sql语句为:

SELECT * FROM employee ORDER BY salary

可以看到,mybatis对其没有做任何的处理。

但是,我们一般推荐使用的是#{},不使用${}的原因如下:

  • 会引起sql注入,因为${}会直接参与sql编译
  • 会影响sql语句的预编译,因为 ${ } 仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换

这是一个比较小的知识点,但是也容易为遗忘,所以记录在此。

转载于:https://www.cnblogs.com/f-zhao/p/6171984.html

你可能感兴趣的文章
设计模式之观察者模式,事件机制的底层原理
查看>>
JAVA中java.util.Date、java.sql.Timestamp和String之间的互相转换
查看>>
firefox火狐浏览器源码下载地址
查看>>
Unix系统编程()close系统调用
查看>>
YTU 2626: B 统计程序设计基础课程学生的平均成绩
查看>>
6.00 Introduction to Computer Science and Programming Lec 9: Lecture 9: Memory and Search Methods
查看>>
LeetCode119. Pascal's Triangle II
查看>>
给我妹妹的一封信
查看>>
oracle防止sql注入
查看>>
bzoj1070题解
查看>>
Squid代理服务器的安装与配置
查看>>
php面试题之一——HTML+CSS(基础部分)
查看>>
【TreeSet:请按照姓名的长度排序】
查看>>
有趣的Linux命令行效果
查看>>
UIButton使用方法汇总
查看>>
ECMAScript中关于如何获取this的定义
查看>>
C语言的字符测试函数
查看>>
【BZOJ1004】【HNOI2008】Cards 群论 置换 burnside引理 背包DP
查看>>
Java你可能不知道的事系列(1)
查看>>
vim 编辑器 常用的设置
查看>>