项目场景:
最近写项目时有个功能点用到了模糊查询,就是根据用户输入的姓名、手机号、和身份证号这三个字段的相关信息进行模糊查询,当时感觉这个功能很简单,无非就类似于预编译语句,再用or关键字连接另外两个字段嘛,然后查询出相关内容。
问题描述:
写好语句后,再数据库中也跑了跑,都能出结果,可是运用到项目中就不行,总是查询不出任何结果
- 注:再数据库中运行
原因分析:
既然时查询不出语句,而传入参数又没任何错误的话,那就只能时sql语句了,于是我又检查了下我的sql语句:如下
<select id="queryLikeAllEmp" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List" />
FROM employee WHERE employee_name LIKE '%#{information}%' OR employee_number like '%#{information}%'OR employee_phone LIKE'%#{information}%'
</select>
写到这,相信遇到过相同bug的猿友们都看出了,那就是错在了这:
解决方案:
木错,就是败在了这小小的单引号上,因为#{…}解析成sql语句时候,会在变量外侧自动加单引号’ ',所以这里 % 需要使用双引号" ",不能使用单引号 ’ ',不然会查不到任何结果。
正确写法:
<select id="queryLikeAllEmp" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List" />
FROM employee WHERE employee_name LIKE "%"#{information}"%" OR employee_number like "%"#{information}"%"OR employee_phone LIKE "%"#{information}"%"
</select>
这时,在输入各种模糊查询条件,就能查询出结果了,如下:
到这,就完成了模糊查询,祝大家都能学有所成。