今天在昨天的基础上实现新闻管理功能。
1.新闻管理
新闻管理也主要是对新闻的一些基础操作,如查询所有等等。其核心代码如下所示
// 分页全查
@GetMapping("/news")
public String news(@PageableDefault(size = 3) Pageable pageable, Model model) {
// 不仅需要查询当前页的数据 还需要查询全部的类别
model.addAttribute("types", typeService.listType());
model.addAttribute("page", newsService.listNews(pageable));
return "admin/news";
}
// 新增的前置操作
@GetMapping("/news/input")
public String toAdd(Model model) {
// 需要传递空对象 所有类别 所有标签
model.addAttribute("news", new News());
model.addAttribute("types", typeService.listType());
model.addAttribute("tags", tagService.listTag());
return "admin/news-input";
}
// 新增操作
@PostMapping("/news/add")
public String addOrUpdate(News news, HttpSession session, RedirectAttributes attributes) {
// 得到用户对象 将用户对下个存储到News对象中
news.setUser((User) session.getAttribute("user"));
// 得到Type对象 , 将Type对象存储到News对象中, 因为前台传递的Type对象中只有一个id 所以需要通过id找到整个type对象 再进行存储
news.setType(typeService.getTypeById(news.getType().getId()));
// 得到tags对象
news.setTags(tagService.listTag(news.getTagIds()));
System.out.println(news);
News n;
// 判断当前是新增或是更新
if (news.getId() == null) {
n = newsService.save(news);
} else {
n = newsService.updateNews(news.getId(), news);
}
if (n == null) {
attributes.addFlashAttribute("message", "操作失败");
} else {
attributes.addFlashAttribute("message", "操作成功");
}
return "redirect:/admin/news";
}
2.总结
- JPA自带分页全查
Page<T> findAll(Pageable pageable);
在使用时直接调用该函数即可,注意需传入pageable参数(指定分页每页的项数等等)。例如@PageableDefault(size = 3) Pageable pageable
就指定每页有三项数据。