Mybatis占位符与拼接符

2021/03/04
共 346 字
约 1 分钟
归档: 学习

#{}也不是万能的


#{}叫占位符,sql预编译,能防止sql注入,变量替换后,#{}对应的变量自动加上单引号’’

${}叫拼接符,sql拼接,不能防止sql注入,量替换后,对应的变量不会自动加上单引号’’

一般情况下能用#{}就用#{},一直以来也没想出${}存在的意义,直到前些天做毕设时第一次遇到需要使用${}的情况


需求:使用 in 语句,查询 book.id 在 ids 中的数据

SELECT book.id,user.name as author FROM book,user WHERE book.uid = user.id AND book.id IN (#{ids})

ids为格式如下的字符串:1','2','3正因为知道使用#{}会在头尾加上单引号,才会传这样的字符串

使用 Mybatis Log 插件显示出来的确实是IN ('1','2','3')
把这个语句粘贴到navicat自然也可以运行但程序实际上查询的时候将会只查出book_id为1的那个虽然显示是一样的,但是他把ids一整个作为参数了,而in语句是多个参数用逗号隔开的

于是想把字符串的单引号去掉
ids格式为:1,2,3但是,自动加上双引号后会变成IN ('1,2,3'),依然不可行

最后只好把#{ids}改成${ids},这样出来的就是IN (1,2,3)

留言

本站已运行
© 2024 Jack  由 Hexo 驱动
目录

复制成功