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注入。

 

posted @ 2021-01-25 14:40  仲秋呀  阅读(70)  评论(0)    收藏  举报