使用like语句进行参数化模糊查找时,需要使用concat函数。(在实际的使用中,条件是作为参数传递进来的。 所以我们使用 concat() 函数)。
假设需要模糊匹配的是字段name,其sql语句如下
select * from Table where 1=1 name like '%?name%'
通过执行语句,数据库却提示语法错误,而错误原因是因为参数化的时候?name最终会被字符串替代;假设?name参数化时,其值为’jin’;上述语句等价如下:
select * from Table where 1=1 name like '%'jin'%'
很明显 ‘%’jin’%’ 是非法的;
正确语法如下:
select * from Table where 1=1 name like concat('%',?name,'%')
实例:
数据库中:
实体类:
Mapper.xml文件的配置以及sql语句:
类似value的,实际项目中后面的是以参数传进来的:
而不是具体的条件: