激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

香港云服务器
服務(wù)器之家 - 編程語言 - Java教程 - spring data jpa分頁查詢示例代碼

spring data jpa分頁查詢示例代碼

2020-08-23 15:17碼農(nóng)的天空 Java教程

本篇文章主要介紹了spring data jpa分頁查詢示例代碼,分頁在很多項(xiàng)目中都能使用,具有一定的參考價值,有興趣的可以了解一下。

最近項(xiàng)目上用就hibernate+spring data jpa,一開始感覺還不錯,但是隨著對業(yè)務(wù)的復(fù)雜,要求處理一些復(fù)雜的sql,就順便研究了下,把結(jié)果記錄下,以便日后查看。用到Specification,需要繼承JpaSpecificationExecutor接口。(下面代碼有的分頁從0開始作為第一頁,有的從1開始作為作為第一頁,我也忘記,請自己測試)

DAO層:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.util.List; 
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
 
 
@Repository
public interface CameraInfoRepo extends JpaRepository<CameraInfoPO, String>, JpaSpecificationExecutor<CameraInfoPO> {
   
  @Query("select c from CameraInfoPO c where c.deviceInfo.id = ?1")
  public List<CameraInfoPO> findCamerasByDeviceId(String listDeviceInfoId);
   
  //更新之后不清空緩存,在一個事務(wù)里查詢到舊數(shù)據(jù)(hibernate)
  @Modifying
  @Query(value = "update CameraInfoPO c set c.isEnabled = 1 where c.id = ?1")
  public void updateEnabled(String cameraId);
   
  //更新之后清空緩存,不保留舊對象(hibernate)
  @Modifying(clearAutomatically = true)
  @Query(value = "update CameraInfoPO c set c.isEnabled = 0 where c.id = ?1")
  public void updateUnEnabled(String cameraId);
   
  //帶條件的分頁查詢   
  public Page<CameraInfoPO> findByIsEnabled(Integer isEnabled, Pageable pageable);
   
}

DAO實(shí)現(xiàn)層

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import java.util.ArrayList;
import java.util.List;
 
import javax.annotation.Resource;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
 
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Repository;
 
@Repository
public class CameraInfoRepoImpl {
   
  @PersistenceContext
  private EntityManager em;
   
  @Resource
  private CameraInfoRepo cameraInfoRepo;
   
  public Page<CameraInfoPO> findCameraInfoByPage(Pageable pageable, Integer isEnabled) {
     
    //CriteriaBuilder,用來構(gòu)建CritiaQuery的構(gòu)建器對象
    CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
     
    //CriteriaQuery,它包含著查詢語句的條件各個部分,比如:select 、from、where、group by、order by等
    CriteriaQuery<CameraInfoPO> criteriaQuery = criteriaBuilder.createQuery(CameraInfoPO.class);
     
    //查詢根,用于獲取查詢實(shí)例的屬性,通過CriteriaQuery的from方法獲取
    Root<CameraInfoPO> rootFrom = criteriaQuery.from(CameraInfoPO.class);
     
    //查詢條件
    List<Predicate> predicates = new ArrayList<Predicate>();
     
    if (null != isEnabled) {
      Predicate predicate = criteriaBuilder.equal(rootFrom.get("isEnabled").as(Integer.class), isEnabled);
      predicates.add(predicate);
       
    }
     
    //格式化參數(shù)
    criteriaQuery.where(criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()])));
     
    //默認(rèn)按照id排序(從小到大)
    criteriaQuery.orderBy(criteriaBuilder.asc(rootFrom.get("id")));
     
    //SQL查詢對象
    TypedQuery<CameraInfoPO> createQuery = em.createQuery(criteriaQuery);
     
    //分頁參數(shù)
    Integer pageSize = pageable.getPageSize();
    Integer pageNo = pageable.getPageNumber();
     
    //計(jì)數(shù)查詢結(jié)果條數(shù)
    TypedQuery<CameraInfoPO> createCountQuery = em.createQuery(criteriaQuery);
     
    // 實(shí)際查詢返回分頁對象
    int startIndex = pageSize * pageNo;
    createQuery.setFirstResult(startIndex);
    createQuery.setMaxResults(pageable.getPageSize());
    Page<CameraInfoPO> pageRst =
      new PageImpl<CameraInfoPO>(createQuery.getResultList(), pageable, createCountQuery.getResultList().size());
    return pageRst;
     
  }
   
  //制造查詢條件結(jié)果(建議存放map)
  private Specification<CameraInfoPO> getWhereClause(final Integer isEnabled) {
    return new Specification<CameraInfoPO>() {
      public Predicate toPredicate(Root<CameraInfoPO> r, CriteriaQuery<?> q, CriteriaBuilder cb) {
        Predicate predicate = cb.conjunction();
        if (null != isEnabled) {
           
          predicate = cb.equal(r.get("isEnabled").as(Integer.class), isEnabled);
        }
         
        return predicate;
      }
    };
  }
   
  //單表根據(jù)查詢條件的分頁
  public Page<CameraInfoPO> findCameraInfoByPageForJpa(Pageable pageable, Integer isEnabled) {
     
    Specification<CameraInfoPO> spec = getWhereClause(isEnabled);
     
    Page<CameraInfoPO> pageRst = cameraInfoRepo.findAll(spec, pageable);
     
    return pageRst;
     
  }
   
}

還有另外一種就更簡單了,如果只是根據(jù)表里面的一個或者幾個字段,可以直接寫jpa實(shí)現(xiàn),不用復(fù)雜

?
1
2
Pageable pageable = new PageRequest(1, 1);
Page<CameraInfoPO> page = cameraInfoRepo.findByIsEnabled(1, pageable);

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:http://blog.csdn.net/rshw123456/article/details/51694129

延伸 · 閱讀

精彩推薦
434
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 精品欧美一区二区精品久久小说 | 国产流白浆高潮在线观看 | 一区二区三区在线播放视频 | 成人性视频欧美一区二区三区 | 在线成人一区 | 91一区二区三区久久久久国产乱 | 国产精品久久久久久婷婷天堂 | av手机免费在线观看 | 亚洲精品一区中文字幕 | 国产免费人做人爱午夜视频 | 91网站在线播放 | 国产精品久久久久久久久久久久久久久久 | 免费男女乱淫真视频 | 一区二区免费 | 国产一区免费观看 | 亚洲人成中文字幕在线观看 | 成人国产精品久久久 | 久夜草 | 久在线播放 | 国产成人av在线播放 | 亚洲一级成人 | 亚洲小视频在线 | 欧美一级片网站 | 黄色网址免费入口 | av在线免费播放网站 | 黄污网站在线观看 | 福利四区| 国人精品视频在线观看 | 国产精品自拍啪啪 | 91一区二区在线观看 | av成人在线播放 | 国产精品成aⅴ人片在线观看 | 经典三级av在线 | 欧美性生活视频免费 | 久久蜜桃精品一区二区三区综合网 | 日本欧美一区二区三区在线观看 | 久久精品黄| 无遮挡一级毛片视频 | 免费观看三级毛片 | 久久久aa | 欧美成人性色区 |