在我的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
您可以通过多种方法来解决此问题,但是问题是,当String为空时,您的查询是:
SELECT b from Beers b Where b.name LIKE '%%' 因此,当有一个空String时,您需要做一个标记,因为... LIKE '%%'找到每个名字。
PD:不好的做法是返回null,最好是空列表。
回答来源:Stack Overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。