麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > Java > 正文

Spring Data分頁與排序的實現方法

2024-07-14 08:43:00
字體:
來源:轉載
供稿:網友

前言

在實際項目中對Spring Data的各種使用相當多,簡單的增刪改查Spring Data提供了現成的方法,一些復雜的,我們可以在接口方法寫And,Not等關鍵字來搞定,想寫原生SQL,CQL(Neo4j),Query DSL (Elasticsearch)的,直接使用@Query(“......”)注解搞定,真的是方便到不行!

當我們執行批量操作時,比如從數據庫中查找“Person”的所有實例或者根據國家查找每個人,我們經常進行分頁,以便我們可以向最終用戶提供一個小數據塊,并在下一個請求中,我們獲取下一個數據塊。

Spring Data為分頁提供支持。它創建了實現分頁的所有邏輯,例如所有頁面的行計數等等。

在Spring Data中實現分頁非常簡單。我們只需要按照以下步驟操作:

  • 在自定義存儲庫中,擴展  PagingAndSortingRepository。
  • 創建PageRequest對象,該對象是Pageable接口的實現。  此PageRequest對象獲取頁碼,頁面大小以及排序方向和排序字段。
  • 通過傳遞請求的頁碼和頁面限制,您可以獲取此頁面的數據。如果您傳遞錯誤的頁碼,Spring Data將負責處理并且不返回任何數據。

1.創建擴展PagingAndSortingRepository的存儲庫。

@Repositorypublic interface PersonRepositary extends PagingAndSortingRepository<Person, Long>,QueryDslPredicateExecutor<Person> { @Query("select p from Person p where p.country like ?1 order by country") List<Person> findByCountryContains(String country); List<Person> findPersonByHobbyName(String name); @Query("select p from Person p where p.id = ?1 and country='America'") Person findOne(Long id);}

2.  創建域對象。

@Entitypublic class Person { @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id; private String name; private String country; private String gender;@OneToMany(mappedBy="person",targetEntity=Hobby.class,  fetch=FetchType.EAGER,cascade=CascadeType.ALL)  List<Hobby> hobby;public String getName() { return name;}public void setName(String name) { this.name = name;}public String getCountry() { return country;}public void setCountry(String country) { this.country = country;}public String getGender() { return gender;}public void setGender(String gender) { this.gender = gender;}public Long getId() { return id;}public void setId(Long id) { this.id = id;}public List<Hobby> getHobby() { return hobby;}public void setHobby(List<Hobby> hobby) { this.hobby = hobby;}public void addHobby(Hobby ihobby){ if(hobby == null) {  hobby = new ArrayList<Hobby>(); } hobby.add(ihobby);} @Override public String toString() {  return "Person [id=" + id + ", name=" + name + ", country=" + country + ", gender=" + gender + "]"; }}

3.獲取所有人員。創建一個限制為1的PageRequest對象并請求第一頁。

@SpringBootApplication@EnableJpaRepositories("com.example.repo")public class PersonApplication { @Autowired HobbyRepository hRepo; private static final Logger log = LoggerFactory.getLogger(PersonApplication.class); @Bean public CommandLineRunner demo(PersonRepositary repository) {  findAll(repository);  return null; } private PageRequest gotoPage(int page) {  PageRequest request = new PageRequest(page,1)  return request; } private void findAll(PersonRepositary repository) {  Iterable<Person> pList = repository.findAll(gotoPage(0));  for(Person p : pList)   log.info("Person " + p); } public static void main(String[] args) {  SpringApplication.run(PersonApplication.class, args); }}

運行時SQL輸出:

Hibernate: 
    select
        count(person0_.id) as col_0_0_ 
    from
        person person0_
Hibernate: 
    select
        person0_.id as id1_1_,
        person0_.country as country2_1_,
        person0_.gender as gender3_1_,
        person0_.name as name4_1_ 
    from
        person person0_ limit ?
Person Person [id=13, name=Samir mitra, country=America, gender=male]

分頁和排序代碼實現

要進行排序,我們必須傳遞排序方向和排序字段以及頁碼和限制。假設我們想按國家名稱按升序排序 - 我們修改  goto 方法如下:

private PageRequest gotoPage(int page){ PageRequest request = new PageRequest(page,1,Sort.Direction.ASC,"country"); return request;}

SQL輸出:

select
        count(person0_.id) as col_0_0_ 
    from
        person person0_
Hibernate: 
    select
        person0_.id as id1_1_,
        person0_.country as country2_1_,
        person0_.gender as gender3_1_,
        person0_.name as name4_1_ 
    from
        person person0_ 
    order by
        person0_.country asc limit ?

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美一级美片在线观看免费 | 国产精品久久久乱弄 | 91成人免费版| 国产精品区一区二区三区 | 久久亚洲春色中文字幕久久 | 成人在线国产 | 国产精品热 | 久久久久久久久久久久久久久伊免 | 国产精品一区在线免费观看 | 一边吃奶一边摸下娇喘 | 羞羞羞网站 | 看免费黄色一级片 | 91精品国产九九九久久久亚洲 | 久久精品首页 | 美女黄色毛片免费看 | 精品国产一区二区三区四区阿崩 | 国产成人小视频在线观看 | 国产亚洲精品久久久久5区 日韩一级片一区二区三区 国产精品久久久久av | 欧美在线观看禁18 | 久久久www成人免费毛片 | 日韩精品中文字幕一区二区 | chinesegv男男猛男无套 | 国产手机在线视频 | 午夜精品小视频 | 国产精品视频在线观看免费 | 免费在线中文字幕 | 91午夜在线观看 | 免费播放欧美毛片 | 久色视频网站 | 综合国产在线 | 亚洲精久久 | 欧美日韩国产成人在线 | 精品中文字幕视频 | 国产88久久久国产精品免费二区 | 国产免费大片视频 | 一级做a爱片久久毛片a高清 | sese在线视频 | 国产一级片91 | 国产色91 | 成人在线观看免费视频 | 欧美精品成人一区二区在线观看 |