小编给大家分享一下Java中如何实现jpa外连接查询join,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
1、IndexTagController.java
@GetMapping("/tags/{id}")
public String types(@PageableDefault(size = 3,sort = {"updateTime"},direction = Sort.Direction.DESC)Pageable pageable,
@PathVariable long id,
Model model,
HttpSession session){
//找到所有的标签,并且按照标签新闻量排序
List<Tag> tags = tagService.listTagTop(50);
if(id == -1){
//得到最大数据量的分类
id = tags.get(0).getId();
}
model.addAttribute("tags",tags);
model.addAttribute("page",newsService.listNews(id,pageable));
model.addAttribute("activeId",id);
session.setAttribute("query","");
return "tags";
}
newService.listNews(id,pgeable)中id为标签的id,这个方法要做的就是查询出标签中包含id为参数id的所有新闻。
2、业务层代码
NewService.java是一个接口,其中存在以下方法
//根据标签Id查找符合条件的新闻
Page<News> listNews(long id,Pageable pageable);
NewServiceImpl.java为实现NewService接口的类,实现listNews方法
@Override
public Page<News> listNews(long id, Pageable pageable) {
return newsRepository.findAll(new Specification() {
@Override
public Predicate toPredicate(Root root, CriteriaQuery cq, CriteriaBuilder cb) {
//外连接查询 Join
Join join =root.join("tags");
return cb.equal(join.get("id"),id);
}
},pageable);
}
NewsRepository.java 继承了JpaSpecificationExecutor
public interface NewsRepository extends JpaRepository<News,Long>, JpaSpecificationExecutor {
@Query("select n from News n where n.recommend = true ")
List<News> findTop(Pageable pageable);
@Query("select n from News n where n.title like ?1 or n.content like ?1")
Page<News> findByQuery(String query,Pageable pageable);
@Query("select function('date_format',n.updateTime,'%Y') as year1 from News n group by year1 order by year1 desc ")
List<String> findGroupYear();
@Query("select n from News n where function('date_format',n.updateTime,'%Y') = ?1 ")
List<News> findByYear(String year);
}
看完了这篇文章,相信你对“Java中如何实现jpa外连接查询join”有了一定的了解,如果想了解更多相关知识,欢迎关注天达云行业资讯频道,感谢各位的阅读!