Java开发学习.Day10
基于Springboot实现 新闻首页和详情功能
本文内容是基于Java开发学习.Day9内容上所实现的
新闻首页
代码实现
该界面主要有新闻分页列表、分类列表、标签列表、推荐列表四个模块。
因此,在代码实现时分别从上述三个方面实现
新闻分页列表
根据分页显示新闻列表
在newService接口中添加方法
//主页分页展示
Page<News> listNew(Pageable pageable);
在Impl中实现上述该方法
@Override
public Page<News> listNew(Pageable pageable) {
return newRepository.findAll(pageable);
}
分类列表
不分页显示分类列表
在dao的TypeRepository中添加新的查询方法
@Query("select t from Type t")
List<Type> findTop(Pageable pageable);
在TypeService接口中添加方法
List<Type> listTypeTop(Integer size);
在Impl中实现上述该方法
@Override
public List<Type> listTypeTop(Integer size) {
Sort sort = Sort.by(Sort.Direction.DESC,"news.size");
Pageable pageable = PageRequest.of(0,size,sort);
return typeRepository.findTop(pageable);
}
标签列表
不分页显示标签列表
在dao的TagRepository中添加新的查询方法
@Query("select t from Tag t")
List<Tag> findTop(Pageable pageable);
在tagService接口中添加方法
List<Tag> listTagTop(Integer size);
在Impl中实现上述该方法
@Override
public List<Tag> listTagTop(Integer size) {
Sort sort = Sort.by(Sort.Direction.DESC,"newsList.size");
Pageable pageable = PageRequest.of(0,size,sort);
return tagRepository.findTop(pageable);
}
推荐列表
分页显示推荐列表
在dao的newRepository中添加新的查询方法
@Query("select n from News n where n.recommend = true")
List<News> findTop(Pageable pageable);
在newService接口中添加方法
List<News> listRecommendNewTop(Integer size);
在Impl中实现上述该方法
@Override
public List<News> listRecommendNewTop(Integer size) {
Sort sort = Sort.by(Sort.Direction.DESC,"updateTime");
Pageable pageable = PageRequest.of(0,size,sort);
return newRepository.findTop(pageable);
}
添加controller
在IndexController下添加新闻首页的相关代码
@Controller
public class indexController {
@Autowired
private TypeService typeService;
@Autowired
private TagService tagService;
@Autowired
private NewService newService;
@GetMapping("/")
public String index(@PageableDefault(size = 3,sort = {"updateTime"},direction = Sort.Direction.DESC)
Pageable pageable, Model model){
model.addAttribute("page",newService.listNew(pageable));
model.addAttribute("types",typeService.listTypeTop(3));
model.addAttribute("tags",tagService.listTagTop(3));
model.addAttribute("recommendNews",newService.listRecommendNewTop(3));
return "index";
}
}
界面效果展示
新闻查询
代码实现
在NewRepository添加新的查询方式
@Query("select n from News n where n.title like ?1 or n.content like ?1")
Page<News> findByQuery(String query, Pageable pageable);
在NewServiece中添加新方法
Page<News> listNew(String query,Pageable pageable);
在impl中实现
@Override
public Page<News> listNew(String query, Pageable pageable) {
return newRepository.findByQuery(query,pageable);
}
indexController:
@PostMapping("/search")
public String search(@PageableDefault(size = 3,sort = {"updateTime"},direction = Sort.Direction.DESC)Pageable pageable,
@RequestParam String query, Model model){
System.out.println("---------");
model.addAttribute("page",newService.listNew("%"+query+"%",pageable));
model.addAttribute("query",query);
return "search";
}
界面效果显示
查询结果:
新闻跳转
该功能要求点击主页的新闻标题,可以根据新闻id跳转至详情页浏览
代码实现
在NewServiece中添加新方法,根据id查找新闻
News getAndConvert(Long id);
在impl中实现
@Override
public News getAndConvert(Long id) {
News news = newRepository.findById(id).orElse(null);
if(news==null){
System.out.println("该新闻不存在");
}
News news1 = new News();
BeanUtils.copyProperties(news,news1);
String content = news1.getContent();
news1.setContent(MarkdownUtils.markdownToHtmlExtensions(content));
return news1;
}
在indexController中实现页面跳转
@RequestMapping("/news/{id}")
public String news(@PathVariable Long id, Model model){
News news = newService.getAndConvert(id);
model.addAttribute("news",news);
return "new";
}