MyBatis实现模糊查询的三种方式
程序员文章站
2022-05-24 20:20:44
...
概念
模糊查询即模糊检索,是指搜索系统自动按照用户输入关键词的同义词进行模糊检索,从而得出较多的检索结果。与之相反的是“精准搜索”。对于MyBatis来说大概有如下几种方式实现:①使用$占位符,②使用数据库函数
concat
,③使用 MyBatis的动态SQL标签<bind>,本文主要重点介绍第二种方法的实现。
方法一
直接使用 % 拼接字符串,如
'%'#{name}'%'
或"%"#{name}"%"
,单引号或双引号都可以。注:使用${…}不能有效防止SQL注入,所以这种方式虽然简单但是不推荐使用!!!
<!--根据关键词模糊查询所有信息 -->
<select id="selectByKeyWord" resultType="com.inchlifc.entity.Admin">
SELECT * FROM Admin
<where>
<if test="keyWord !=null">
keyWord LIKE '%${partNum}%'
</if>
</where>
</select>
方法二
concat
属于数据库函数,MySQL 和 Oracle 都支持,用于字符串连接,而且可以使用#
作为占位符,防止 SQL 注入。
Mapper文件
<!--根据产品件号模糊查询机信息 -->
<select id="selectInStockByPartNum" resultType="com.inchlifc.entity.InStock">
SELECT * FROM in_stock
<where>
<if test="partNum!=null">
partNum LIKE CONCAT('%', #{partNum}, '%')
</if>
</where>
ORDER BY createTime desc
</select>
Dao层
/**
* 根据产品件号模糊查询信息
*
* @param partNum 产品件号
* @return
*/
List<InStock> selectInStockByPartNum(String partNum);
Service层
/**
* 根据产品件号模糊查询信息
*
* @param partNum 产品件号
* @return
*/
public List<InStock> findInStockByPartNum(String partNum) {
return inStockDao.selectInStockByPartNum(partNum);
}
controller层
/**
* 根据产品件号模糊查询信息
*
* @param partNum 产品件号
* @return
*/
@RequestMapping(value = "/search", method = RequestMethod.GET)
@ResponseBody
private ModelAndView getInStockByPartNum(String partNum) {
ModelAndView mv = new ModelAndView();
List<InStock> list = inStockService.findInStockByPartNum(partNum);
mv.addObject("stockList", list);
mv.setViewName("inStockList");
return mv;
}
页面
<div style="width:100%;float:left;text-align:left;">
<form role="form" style="text-align: left;" action="<%=basePath%>inStock/search" id="formSearch" method="get">
<label class="form-inline">产品编号:
<input type="text" class="form-control" name="partNum" autofocus="autofocus">
</label>
<button class="btn btn-info" type="submit">查询</button>
</form>
</div>
结果
方法三
bind
元素可以从 OGNL 表达式中创建一个变量并将其绑定到上下文。使用bind
标签就可以对某个字段进行'封装',比如给上面的keyWord
字段两端各加一个百分号。
<!--根据关键词模糊查询所有信息 -->
<select id="selectByKeyWord" resultType="com.inchlifc.entity.Admin">
SELECT * FROM Admin
<bind name="keyword" value="'%' + keyword + '%'" />
<where>
<if test="keyWord !=null">
keyWord LIKE #{keyword}
</if>
</where>
</select>
下一篇: PDF文件太大怎么调整大小?