【发布时间】:2020-06-27 16:51:47
【问题描述】:
在我的 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>
【问题讨论】: