软件编程
位置:首页>> 软件编程>> java编程>> Java jpa外连接查询join案例详解

Java jpa外连接查询join案例详解

作者:sfidjg  发布时间:2022-12-17 18:31:15 

标签: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);

}

来源:https://blog.csdn.net/qq_41708916/article/details/107795979

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com