模糊查询的实现基于之前实现增删改查功能的博客一和博客二,可能里面的方法名和类名有所不同,但结构相同,换汤不换药。完成后的效果如下:
进入主页面:
搜索“1”
搜索“狗”
下面开始说明实现过程
在dao层的接口下添加:
List<Pet> findPetByName(@Param("petName")String petName);
在mapper下的xml文件内添加数据库语句:
<select id="findPetByName" resultType="com.whut.beans.Pet" parameterType="Pet">
SELECT * FROM pets WHERE petName LIKE CONCAT(CONCAT('%',#{petName},'%'))
</select>
在Service类添加:
List<Pet> findPetByName(@Param("petName")String petName);
在impl文件下添加:
@Override
public List<Pet> findPetByName(String petName){
return pd.findPetByName(petName);
}
在comtroller文件下添加:
@RequestMapping("/findPetByName.do")
public ModelAndView findPetByName(@RequestParam(defaultValue="1") int page,@RequestParam(defaultValue="8")int size,Pet pet){
System.out.println(pet.getPetName());
List<Pet> pets = ps.findPetByName(pet.getPetName());
PageInfo pageInfo_s = new PageInfo(pets);
ModelAndView mv = new ModelAndView();
mv.addObject("pageInfo_s", pageInfo_s);
mv.setViewName("search_result");//search_result
return mv;
在主页显示页面选择合适位置添加搜索按钮以及url:
<!-- 搜索 -->
<div class="tools" id="search" style="width: 80%; display:inline-block;vertical-align: top;">
<ul class="searchform">
<li>
<form action="${pageContext.request.contextPath}/pet/findPetByName.do" method="post">
<input type="text" name="petName" placeholder="根据宠物名字查询" style="border: 1px solid #E6E6E6;;height:28px;width:120px;">
<button class="layui-btn layui-btn-sm"><i class="layui-icon">ꅣ</i> 搜索</button>
</form>
</li>
</ul>
</div>
最后创建一个展示搜索结果的jsp文件,并设置url,部分代码:
<!-- 搜索 -->
<div class="tools">
<ul class="searchform">
<button class="layui-btn layui-btn-sm"></i> 搜索结果</button>
</form></li>
</ul>
</div>
</div>
<div class="row clearfix">
<div class="col-md-12 column">
<table class="table table-hover table-striped">
<thead>
<tr>
<th>id</th>
<th>宠物名称</th>
<th>宠物价格</th>
<th>宠物种类</th>
<th>宠物年龄</th>
<th>宠物性别</th>
<th>宠物颜色</th>
<th>宠物状态</th>
</tr>
</thead>
<tbody>
<c:forEach var="pet" items="${pageInfo_s.list}" >
<tr>
<td>${pet.petId}</td>
<td>${pet.petName}</td>
<td>${pet.salePrice}</td>
<td>${pet.petKind}</td>
<td>${pet.petAge}</td>
<td>${pet.petSex}</td>
<td>${pet.petColor}</td>
<td>${pet.petState}</td>
<td>
<a href="${pageContext.request.contextPath}/pet/toUpdate.do?id=${pet.petId}">更改</a> |
<a href="${pageContext.request.contextPath}/pet/delete.do?petId=${pet.petId}">删除</a>
</td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
</div>
<!-- /.box-body 当前第一页 共10页-->
<div class="box-tools pull-left">
<div class="message">共<i class="blue">${pageInfo_s.total }</i>条记录,当前显示第
<i class="blue">${pageInfo_s.pageNum } </i>页 总<i class="blue">${pageInfo_s.pages }</i>页
</div>
</div>
<div class="box-tools pull-right">
<ul class="pagination">
<li><a href="${pageContext.request.contextPath}/pet/findPetByName.do?page=1&size=8" aria-label="Previous">首页</a></li>
<li><a href="${pageContext.request.contextPath}/pet/findPetByName.do?page=${pageInfo.pageNum-1}&size=4">上一页</a></li>
<c:forEach begin="1" end = "${pageInfo.pages}" var="pageNum">
<li><a herf="${pageContext.request.contextPath}/pet/findPetByName.do?page=${pageNum}&size=8">${pageNum}</a></li>
</c:forEach>
<li><a href="${pageContext.request.contextPath}/pet/findPetByName.do?page=${pageInfo.pageNum+1}&size=8"> 下一页</a></li>
<li><a href="${pageContext.request.contextPath}/pet/findPetByName.do?page=${pageInfo.pages}&size=8" aria-label="Next">尾页</a></li>
</ul>
</div>
</div>
</div>
到此时运行程序已经能实现对于数字和字母的模糊查询了,但是对于汉字的查询会报错,通过浏览博客上的纠错帖和亲自尝试,我试出了一个有效的方法:
打开tomcat安装位置,打开server.xml文件
进行编辑,在方框处添加代码:
完成之后保存,此时再运行不会立刻生效,需要重新配置一个tomcat server:配置方法参考文首博客一。
配置完成后,关闭之前的tomcat server,重新启动,保证生效。人生巅峰,迎娶白富美。