开发者社区> 问答> 正文

没有搜索任何内容时,Spring搜索功能返回完整列表

在我的spring应用程序中,我添加了一个搜索功能,用户可以在数据库中搜索名称,该功能可以正常工作,除非当我搜索名称或类似名称时,但是对于我什么都不输入也不进行搜索时,它应该不返回任何内容。但会返回完整的名称列表。

我将列表设置为如果为null则返回null,我的逻辑有什么缺陷?

通过测试和使用findbyname SQL,我认为这是我的SQL状态的缺陷

使用的控制器方法是

@RequestMapping("search")
public ModelAndView SearchBeers(@RequestParam("searchTerm") String searchTerm) {

    return new ModelAndView("/Searchbeers", "beerList", service.Search(searchTerm));

}

服务方法称为

public List<Beers> Search(String searchTerm) {
    EntityManager em = DBUtil.getEMF().createEntityManager();
    List<Beers> list = null;

    try {
        list = em.createNamedQuery("Beers.findByLikeName", Beers.class)
                .setParameter("name", searchTerm)
                .getResultList();
        if (list == null || list.isEmpty()) {
            list = null;
        }

    } finally {
        em.close();
    }
    return list;
}

和使用的SQL语句是

@NamedQuery(name = "Beers.findByLikeName", query = "SELECT b FROM Beers b WHERE b.name LIKE CONCAT('%',:name,'%')")

显示列表时的JSP是

<c:forEach items="${beerList}" var="beer"> 
            <tr>
                <td>${beer.id}</td>
                <td>${beer.name}</td>
                <td>${beer.abv}</td>


                <td>
                    <form action="/Assignment3/beer/viewBeer">
                        <input type="hidden" name="id" value="${beer.id}"/>
                        <input type="submit" value="<spring:message code="label.viewDetails"/>"/>
                    </form>
                </td>

            </tr>
        </c:forEach>

问题来源:Stack Overflow

展开
收起
montos 2020-03-22 14:54:09 693 0
1 条回答
写回答
取消 提交回答
  • 您可以通过多种方法来解决此问题,但是问题是,当String为空时,您的查询是:

    SELECT b from Beers b Where b.name LIKE '%%' 因此,当有一个空String时,您需要做一个标记,因为... LIKE '%%'找到每个名字。

    PD:不好的做法是返回null,最好是空列表。

    回答来源:Stack Overflow

    2020-03-22 14:54:31
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载