Java jpa外連接查詢(xún)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){
//找到所有的標(biāo)簽,并且按照標(biāo)簽新聞量排序
List<Tag> tags = tagService.listTagTop(50);
if(id == -1){
//得到最大數(shù)據(jù)量的分類(lèi)
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為標(biāo)簽的id,這個(gè)方法要做的就是查詢(xún)出標(biāo)簽中包含id為參數(shù)id的所有新聞。
2、業(yè)務(wù)層代碼
NewService.java是一個(gè)接口,其中存在以下方法
//根據(jù)標(biāo)簽Id查找符合條件的新聞 Page<News> listNews(long id,Pageable pageable);
NewServiceImpl.java為實(shí)現(xiàn)NewService接口的類(lèi),實(shí)現(xiàn)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) {
//外連接查詢(xún) 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);
}
到此這篇關(guān)于Java jpa外連接查詢(xún)join案例詳解的文章就介紹到這了,更多相關(guān)Java jpa外連接查詢(xún)join內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java設(shè)計(jì)模式中的單一責(zé)任原則詳解
這篇文章主要介紹了Java設(shè)計(jì)模式中的單一責(zé)任原則詳解,應(yīng)該有且僅有一個(gè)原因引起類(lèi)的變更,即單一指責(zé)原則要求一個(gè)借口或類(lèi)只有一個(gè)原因引起變化,也就是一個(gè)接口或類(lèi)只有一個(gè)職責(zé),它就負(fù)責(zé)一件事情,需要的朋友可以參考下2023-11-11
Java中Spring MVC接收表單數(shù)據(jù)的常用方法
Spring MVC是Spring框架中的一個(gè)模塊,用于開(kāi)發(fā)基于MVC(Model-View-Controller)架構(gòu)的Web應(yīng)用程序,它提供了一種輕量級(jí)的、靈活的方式來(lái)構(gòu)建Web應(yīng)用,同時(shí)提供了豐富的功能和特性,本文給大家介紹了Spring MVC接收表單數(shù)據(jù)的方法,需要的朋友可以參考下2024-05-05
Springboot項(xiàng)目編寫(xiě)測(cè)試單元完整步驟記錄
這篇文章主要介紹了如何使用JUnit編寫(xiě)Spring?Boot項(xiàng)目中的測(cè)試單元,包括引入依賴(lài)、配置文件設(shè)置、啟動(dòng)文件創(chuàng)建以及編寫(xiě)測(cè)試類(lèi)的步驟,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-03-03
Java基礎(chǔ)入門(mén)之switch怎么使用枚舉
在Java開(kāi)發(fā)中,switch語(yǔ)句是一種常用的流控制語(yǔ)句,而當(dāng)使用枚舉類(lèi)型作為條件時(shí),我們常常會(huì)遇到報(bào)錯(cuò)問(wèn)題,那么該如何解決呢,下面就來(lái)詳細(xì)講講2023-06-06
SpringBoot使用freemarker導(dǎo)出word文件方法詳解
這篇文章主要介紹了SpringBoot使用freemarker導(dǎo)出word文件方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-11-11

