全部查询和搜索模糊查询
全部查询和搜索模糊查询的复用,包括Mapper.xml 代码,Controller.java代码,和遇到的问题及解决方法。
- Mapper.xml 代码:
<!--查询全部Book-->
<select id="queryAllBook" resultType="Books">
select * from ssmbuild.books
</select>
<!--搜索查询书籍-->
<select id="queryBookName" resultType="Books">
<!--这个是对的,可以为null,也可以模糊查询, 上面的select全部可以省略-->
<!--select * from ssmbuild.books where bookName like concat('%', #{bookName}, '%') or #{bookName} is null-->
<!--这个是模糊查询, 上面的select全部要保留-->
<!--select * from ssmbuild.books where 1=1 and bookName like concat('%', #{bookName}, '%')-->
<!--这个最好,可以为null,也可以模糊查询, 最好上面的select不要省略-->
select * from ssmbuild.books where 1=1
<if test="bookName != null">
<!--and bookName = #{bookName} 这句是完整查询 -->
and bookName like concat('%', #{bookName}, '%')
</if>
</select>
- 可以做到复用Controller的代码,Controller.java:
//查询全部书籍,返回到一个书籍展示页面
@RequestMapping("/allBook")
public String list(Model model){
// List<Books> list = bookService.queryAllBook();
// model.addAttribute("list",list);
// return "allBook";
//复用下面queryBook()的代码,用上面代码不复用也可
return queryBook(null,model);
}
//搜索查询书籍
@RequestMapping("/queryBook")
public String queryBook(String queryBookName,Model model){
List<Books> booksList = bookService.queryBookName(queryBookName);
//System.out.println(queryBookName == null); //结果为:false
/* 测试前端传来的是 “空的字符串”
用 queryBookName.equals("") 判断
《搞了好久才发现解决》
*/
if ( queryBookName.equals("")){
model.addAttribute("error","未查到");
System.out.println("queryBookName:(" + queryBookName +") =========== 未查到");
}
model.addAttribute("list",booksList);
return "allBook";
}
- 遇到问题:给前端的参数 error ,在没有输入值时,显示“未查到”;有输入值时,还显示“未查到”。
- 分析:用
System.out.println(queryBookName == null);
测试queryBookName 是否为空?
输出结果为:false - 说明:虽然前端输入栏中没有传入数据,但是给后台还是给出了一个“空字符串”。
- 解决:
if ( queryBookName.equals(""))
,如果 queryBookName 为空,显示“未查到”。
//System.out.println(queryBookName == null); //结果为:false
/* 测试前端传来的是 “空的字符串”
用 queryBookName.equals("") 判断
《搞了好久才发现解决》
*/
if ( queryBookName.equals("")){
model.addAttribute("error","未查到");
System.out.println("queryBookName:(" + queryBookName +") ======== 未查到");
}