【DAY9】springboot实现信息搜索

您所在的位置:网站首页 javaweb关键字查找功能 【DAY9】springboot实现信息搜索

【DAY9】springboot实现信息搜索

2024-07-14 08:01| 来源: 网络整理| 查看: 265

今天的内容主要是完成新闻的新增、修改和搜索,新增和修改与之前类似,不同的是,新闻需要加入MarkDown文本编辑器,将编辑器内容保存起来,但不再赘述,而搜索的实现是相对比较陌生的,因此记录一下搜索的实现。

搜索实现

要想实现搜索,首先要创建一个NewsQuery的实体类,该类可以通过新闻的标题、类型和是否被推荐三个条件来搜索新闻。

public class NewsQuery { private String title;//标题 private String typeId;//类型id private Boolean recommend;//是否被推荐 public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getTypeId() { return typeId; } public void setTypeId(String typeId) { this.typeId = typeId; } public Boolean getRecommend() { return recommend; } public void setRecommend(Boolean recommend) { this.recommend = recommend; } @Override public String toString() { return "NewQuery{" + "title='" + title + '\'' + ", typeId=" + typeId + ", recommend=" + recommend + '}'; } }

在界面上通过输入的条件,生成NewsQuery对象传给后台

$("#search-btn").click(function () { $("[name = 'page']").val(0); load(); }); function load() { $("#table-container").load("/admin/news/search", { title: $("[name = 'title']").val(), typeId: $("[name = 'typeId']").val(), recommend: $("[name = 'recommend']").prop('checked'), page: $("[name = 'page']").val() }) }

在NewsController中,search方法如下

@RequestMapping("search") public String search(@PageableDefault(size = 5, sort = {"id"}, direction = Sort.Direction.DESC) Pageable pageable, Model model, NewsQuery newsQuery){ Page page = newsService.searchNews(pageable, newsQuery); model.addAttribute("page", page); return "admin/news :: newsList"; }

INewsService新增searchNews方法,并在实现类中实现

Page searchNews(Pageable pageable, NewsQuery newsQuery);

实现类NewsServiceImpl中

@Override public Page searchNews(Pageable pageable, NewsQuery newsQuery) { Page page = newsDao.findAll(new Specification() { @Override public Predicate toPredicate(Root root, CriteriaQuery criteriaQuery, CriteriaBuilder criteriaBuilder) { List predicates = new ArrayList(); if(!StringUtils.isEmpty(newsQuery.getTitle())){ predicates.add(criteriaBuilder.like(root.get("title"),"%" + newsQuery.getTitle() + "%")); } if(!StringUtils.isEmpty(newsQuery.getTypeId())){ predicates.add(criteriaBuilder.equal(root.get("type").get("id"), newsQuery.getTypeId())); } if(newsQuery.getRecommend() != null){ predicates.add(criteriaBuilder.equal(root.get("recommend"), newsQuery.getRecommend())); }else{ predicates.add(criteriaBuilder.equal(root.get("recommend"), false)); } criteriaQuery.where(predicates.toArray(new Predicate[predicates.size()])); return null; } }, pageable); return page; }

Specification是JPA中用于动态构造查询条件的接口,可以将传入的查询条件动态构建,用于查询。这个接口位于JpaSpecificationExecutor,因此INewsDao接口要继承它。

public interface INewsDao extends JpaRepository, JpaSpecificationExecutor { } 效果图

1



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3