使用Spring JPA實(shí)現(xiàn)帶自定義參數(shù)的分頁查詢

技術(shù)框架

  • Spring Boot
  • Spring JPA
  • Maven

Maven 依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

Controller

@RequestMapping("/list")
public String list(int parentid, int page, int size){
    return categoryService.getList(parentid, page, size);
}

Service

public String getList(int parentid, int page, int size){
    StringBuilder sb = new StringBuilder();
    Sort sort = new Sort(Direction.DESC, "cid");//指定排序字段
    Page<Category> pp = categoryRepository.findByParentid(parentid, new PageRequest(page, size, sort));
    List<Category list = pp.getContent();
    for(Category item : list) {
        //logic process
    }
    return sb.toString();
}

Reponsitory (重點(diǎn))

最簡潔的寫法

public interface CategoryRepository extends JpaRepository<Category, Integer> {
    Page<Category> findByParentid(int parentid, Pageable pageable);
}

手動(dòng)寫SQL的寫法

public interface CategoryRepository extends JpaRepository<Category, Integer> {

    @Query(value="select * from Category where parentid =?1 order by cid desc /* #pageable# */ ",countQuery="select count(*) from Category where parentid = ?1",nativeQuery = true)
    Page<Category> findByParentid(int parentid, Pageable pageable);

}

總結(jié)

本文只貼出了主要部分代碼蝇庭,提供了實(shí)現(xiàn)的思路孕蝉。
作者使用的是H2的數(shù)據(jù)庫埠戳,很奇怪的一點(diǎn)就是在select語句后面需要添加一小段注釋/* #pageable# */
stackoverflow上有一篇文章對這點(diǎn)進(jìn)行了討論嘴纺,上面有人提到mysql的處理方案
mysql的代碼示例

public interface UserRepository extends JpaRepository<User, Long> {
  @Query(value = "SELECT * FROM USERS WHERE LASTNAME = ?1 ORDER BY ?#{#pageable}",
    countQuery = "SELECT count(*) FROM USERS WHERE LASTNAME = ?1",
    nativeQuery = true)
  Page<User> findByLastname(String lastname, Pageable pageable);
}

使用JPA實(shí)現(xiàn)數(shù)據(jù)訪問冗荸,代碼非常簡潔,沒有那么多復(fù)雜的DAO代碼愈涩,非常優(yōu)雅。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末加矛,一起剝皮案震驚了整個(gè)濱河市履婉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌斟览,老刑警劉巖毁腿,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異苛茂,居然都是意外死亡已烤,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進(jìn)店門妓羊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來草戈,“玉大人,你說我怎么就攤上這事侍瑟√破” “怎么了丙猬?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長费韭。 經(jīng)常有香客問我茧球,道長,這世上最難降的妖魔是什么星持? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任抢埋,我火速辦了婚禮,結(jié)果婚禮上督暂,老公的妹妹穿的比我還像新娘揪垄。我一直安慰自己,他們只是感情好逻翁,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布饥努。 她就那樣靜靜地躺著,像睡著了一般八回。 火紅的嫁衣襯著肌膚如雪酷愧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天缠诅,我揣著相機(jī)與錄音溶浴,去河邊找鬼。 笑死管引,一個(gè)胖子當(dāng)著我的面吹牛士败,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播褥伴,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼谅将,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了噩翠?” 一聲冷哼從身側(cè)響起戏自,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎伤锚,沒想到半個(gè)月后擅笔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡屯援,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年猛们,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片狞洋。...
    茶點(diǎn)故事閱讀 38,664評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡弯淘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出吉懊,到底是詐尸還是另有隱情庐橙,我是刑警寧澤假勿,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站态鳖,受9級特大地震影響转培,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜浆竭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一浸须、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧邦泄,春花似錦删窒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至包蓝,卻和暖如春驶社,著一層夾襖步出監(jiān)牢的瞬間企量,已是汗流浹背测萎。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留届巩,地道東北人硅瞧。 一個(gè)月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像恕汇,于是被迫代替她去往敵國和親腕唧。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評論 2 349

推薦閱讀更多精彩內(nèi)容