Mybatis的mapper.xml中$和#的区别?

时间:2021-02-27 19:15:13
#使用↓
and t.`requestControllerMethod` like
CONCAT('%',#{queryEntity},'%')
$使用↓
and t.`requestControllerMethod 
 like '%${title}%'

还有'
concat不是多个字符串拼接吗? 这里的CONCAT('%',#{queryEntity},'%') 为什么把'%'也分开了?
还有
concat能配合$又该怎么使用的呢?

Mybatis的mapper.xml中$和#的区别?

4 个解决方案

#1


如果你有在控制台打印sql你就能看出来一个大概的区别,$是直接拼接进去的,#是类似占位符,打个比方传入id = 1
$在控制台会直接显示 id = 1,而#会显示id = ? 然后在下面会有参数1
最主要的用处是#可以有效防止SQL注入而$不行

#2


最主要的用处是#可以有效防止SQL注入 效果和jdbc 的 id=?相同
而$单纯的字符串带入

#3


引用 1 楼 a61595579 的回复:
如果你有在控制台打印sql你就能看出来一个大概的区别,$是直接拼接进去的,#是类似占位符,打个比方传入id = 1
$在控制台会直接显示 id = 1,而#会显示id = ? 然后在下面会有参数1
最主要的用处是#可以有效防止SQL注入而$不行

也就是${100} 打印的是100 ,${name} 打印的是name吗?
但是这样的话  为什么还要这样写like '%${title}%',而不是like '%title%' 呢?
是不是$和#都是取值? 而$是直接取值,而#也是取值,但是可以防止sql注入?

#4


引用 3 楼 qq_38779405 的回复:
Quote: 引用 1 楼 a61595579 的回复:

如果你有在控制台打印sql你就能看出来一个大概的区别,$是直接拼接进去的,#是类似占位符,打个比方传入id = 1
$在控制台会直接显示 id = 1,而#会显示id = ? 然后在下面会有参数1
最主要的用处是#可以有效防止SQL注入而$不行

也就是${100} 打印的是100 ,${name} 打印的是name吗?
但是这样的话  为什么还要这样写like '%${title}%',而不是like '%title%' 呢?
是不是$和#都是取值? 而$是直接取值,而#也是取值,但是可以防止sql注入?

都是取值,${id} 输出的是id的值,而不是id,你如果有打印sql在控制台的话这个是很明显的区别

#1


如果你有在控制台打印sql你就能看出来一个大概的区别,$是直接拼接进去的,#是类似占位符,打个比方传入id = 1
$在控制台会直接显示 id = 1,而#会显示id = ? 然后在下面会有参数1
最主要的用处是#可以有效防止SQL注入而$不行

#2


最主要的用处是#可以有效防止SQL注入 效果和jdbc 的 id=?相同
而$单纯的字符串带入

#3


引用 1 楼 a61595579 的回复:
如果你有在控制台打印sql你就能看出来一个大概的区别,$是直接拼接进去的,#是类似占位符,打个比方传入id = 1
$在控制台会直接显示 id = 1,而#会显示id = ? 然后在下面会有参数1
最主要的用处是#可以有效防止SQL注入而$不行

也就是${100} 打印的是100 ,${name} 打印的是name吗?
但是这样的话  为什么还要这样写like '%${title}%',而不是like '%title%' 呢?
是不是$和#都是取值? 而$是直接取值,而#也是取值,但是可以防止sql注入?

#4


引用 3 楼 qq_38779405 的回复:
Quote: 引用 1 楼 a61595579 的回复:

如果你有在控制台打印sql你就能看出来一个大概的区别,$是直接拼接进去的,#是类似占位符,打个比方传入id = 1
$在控制台会直接显示 id = 1,而#会显示id = ? 然后在下面会有参数1
最主要的用处是#可以有效防止SQL注入而$不行

也就是${100} 打印的是100 ,${name} 打印的是name吗?
但是这样的话  为什么还要这样写like '%${title}%',而不是like '%title%' 呢?
是不是$和#都是取值? 而$是直接取值,而#也是取值,但是可以防止sql注入?

都是取值,${id} 输出的是id的值,而不是id,你如果有打印sql在控制台的话这个是很明显的区别