MyBatis中的模糊查询
在DML中 , 模糊查询用 LIKE '%' 实现 , 那么在Mybatis中怎么去实现呢?
一顿操作猛如虎 , 敲出以下代码 :
1 <select id='test'> 2 SELECT 3 * 4 FROM 5 test 6 WHERE 7 test_name LIKE %{test_name}% 8 </select>
直接 Error 1064 : 缺少单引号 ...
其实很简单 , 只需要用MySQL的函数 ---> CONCAT
1 <select id='test'> 2 SELECT 3 * 4 FROM 5 test 6 WHERE 7 test_name LIKE CONCAT('%',#{test_name},'%') 8 </select>
这样就可以直接在XML文件写 '%' 了~
扩展一波知识 : CONCAT 函数
CONCAT(str1,str2,…)
返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。或许有一个或多个参数。
如果所有参数均为非二进制字符串,则结果为非二进制字符串。
如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。一个数字参数被转化为与之相等的二进制字符串格式;
若要避免这种情况,可使用显式类型 cast, 例如: SELECT CONCAT(CAST(int_col AS CHAR), char_col)
#{ } 与 ${ }
#{ }是预编译处理,MyBatis在处理#{ }时,它会将sql中的#{ }替换为?,然后调用PreparedStatement的set方法来赋值,传入字符串后,会在值两边加上单引号,使用占位符的方式提高效率,可以防止sql注入。
${}:表示拼接sql串,将接收到参数的内容不加任何修饰拼接在sql中,可能引发sql注入。
作者:Annie
本博客所有文章仅用于学习、研究和交流目的,欢迎非商业性质转载。
博主的文章没有高度、深度和广度,只是凑字数。由于博主的水平不高,不足和错误之处在所难免,希望大家能够批评指出。
博主是利用读书、参考、引用、抄袭、复制和粘贴等多种方式打造成自己的文章,请原谅博主成为一个无耻的文档搬运工!

浙公网安备 33010602011771号