iBatis 中 Like '%iBatis%' 的写法实现模糊查询
在写后台程序的时候,想做到按照单个字段进行模糊查询。
一开始的做法是这样子写的:
<dynamic prepend="WHERE"> <isNotNull prepend="AND" property="name"> (name like #name#) </isNotNull> </dynamic>
但是这句的作用和
select * from user where name = "aa"
并没有实现模糊查询,我们是实现如下的语句
select * from user where name like '%aa'
select * from user where name like 'aa%'
select * from user where name like '%aa%'
在ibatis中该如何写了?一开始我配置成
<dynamic prepend="WHERE"> <isNotNull prepend="AND" property="name"> (name like ‘%#name#%’) </isNotNull> </dynamic>
但是程序报错,后来发现资料找到正确的写法有2种:
1,要把上面的‘%#name#%’ 改成‘%$name$%’
2, 用 || 连接字符串的方式,写成 (name like '%' || #name# || '%')
$符号会把参数原样嵌入sql语句中而不进行预编译,这就使得有可能出现sql注入攻击。其实ibatis从根本上简单的说,凡是#的,都作为参数,用setobject方式预编译。而$方式的,则直接替换字符串。 所以说,$很不安全,会把用户的输入直接当参数放入 sql。
# 会根据不同类型而生产字符串,如 String 类型 : aa ---> 'aa'
$ 表示原生类型,如 String 类型 : aa ---> aa
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步