Java jpa外连接查询join案例详解
短信预约 -IT技能 免费直播动态提醒
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案例详解的文章就介绍到这了,更多相关Java jpa外连接查询join内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341