JAVA初学04

SpringMVC学习历程04-SSM实战03增加搜索功能

添加搜索功能

1.在allBook.jsp里添加搜索功能的按钮和样式

<div class="col-md-4 column">
                <%--查询搜索框--%>
                <form action="${pageContext.request.contextPath}/book/queryBook" method="post" style="float: right;">
                    <input type="text" name="queryBookName" class="form-control" placeholder="输入要查询的书籍名称">
                    <input type="submit" value="查询" class="btn btn-primary">
                </form>
            </div>

注意:这段代码里的name="queryBookName"要和Controller里的方法参数一样

2.因为之前写service层dao层的时候增加了一个查询方法和SQL语句映射,所以我们不用额外写,直接写Controller层

//模糊查询书籍
    @RequestMapping("/queryBook")
    public String queryBook(String queryBookName,Model model) {
        List<Books> list = bookService.queryBookByName(queryBookName);


        //查询优化
        if (list == null) {
            list = bookService.queryAllBook();
        }
        model.addAttribute("list", list);
        return "allBook";
    }

这里加入了判断语句,如果接受的信息是空值,则执行其他方法

但是,sql语句的方法是直接查询(原代码)

<select id="queryBookByName" resultType="Books">
        select * from ssmbuild.books where bookName = #{bookName}
    </select>

好处是即使是个空值,也可以进行页面的跳转 坏处是搜索必须整段搜索,即跟表的字段一模一样不能少

<select id="queryBookByName" resultType="Books">
        select * from ssmbuild.books
        <where>
            <if test="bookName != null">
                bookName like CONCAT('%', bookName, '%')
            </if>
        </where>
    </select>

于是我改成了模糊查询,即上面的代码,解决了搜索功能死板的问题,可以模糊查询,但是一旦空值查询,就会出现页面状态码报错

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 4
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1013)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:908)
javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)
javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:118)

原因是因为

这个错误是由于在使用 MyBatis 的 selectOne() 方法时,预期只返回一个结果或 null,但实际上查询返回了多个结果(在这个例子中是 4 个结果)。selectOne() 方法通常用于执行那些应该只返回一个结果集的查询,比如根据主键查询单条记录。

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值