国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - JAVA教程 - 使用Spring Data JPA的坑點記錄總結

使用Spring Data JPA的坑點記錄總結

2021-03-05 14:44Joryun劉家源 JAVA教程

這篇文章主要給大家總結介紹了關于使用Spring Data JPA的一些坑點,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。

前言

Spring-data-jpa的基本介紹:JPA誕生的緣由是為了整合第三方ORM框架,建立一種標準的方式,百度百科說是JDK為了實現ORM的天下歸一,目前也是在按照這個方向發展,但是還沒能完全實現。在ORM框架中,Hibernate是一支很大的部隊,使用很廣泛,也很方便,能力也很強,同時Hibernate也是和JPA整合的比較良好,我們可以認為JPA是標準,事實上也是,JPA幾乎都是接口,實現都是Hibernate在做,宏觀上面看,在JPA的統一之下Hibernate很良好的運行。

最近在使用Springboot 以及Spring data jpa ,使用jpa可以讓我更方便的操作數據庫,但在使用中也遇到了不少的坑,下面這篇文章就來記錄下,下面話不多說了,來一起看看詳細的介紹吧。

場景:

動態查詢,分頁查詢,根據傳入不同的狀態,分別查詢不同數據表,并且在傳入page對象之前用map進行VO轉換。而pageable的使用地方不同影響到了分頁數據的正確性,以此進行探討。

  • pageable使用于new PageImpl<>中,且直到最后才將List -> Page
  • pageable使用于findAll()中

前提:

Page對象封于VO內,返回數據包括了分頁數據

?
1
2
3
4
5
6
@ApiModelProperty("記錄")
private Page<ActivityRecordVO> activityRecordVOList;
@ApiModelProperty("數量")
private Integer num = 0;
@ApiModelProperty("金額")
private BigDecimal totalMoney = BigDecimal.valueOf(0);

錯誤運用:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
List<ActivityRecordVO> activityRecordVOList = new ArrayList<>();
  if (receiveSendRecordRequestVO.getSendOrReceiveType() == SendOrReceiveType.RECEIVE) {
   List<ChallengeRecord> challengeRecordList = challengeRecordDao.findByUserIdAndDeleteType(userId,
     DeleteType.FALSE);
   if (!CollectionUtils.isEmpty(challengeRecordList)) {
    activityRecordVOList = challengeRecordList.stream()
      .map(this::challengeRecordToActivityRecordVO)
      .collect(Collectors.toList());
   }
  } else if (receiveSendRecordRequestVO.getSendOrReceiveType() == SendOrReceiveType.SEND) {
   List<Activity> activityList = activityDao.findByUserIdAndDeleteType(userId, DeleteType.FALSE);
   if (!CollectionUtils.isEmpty(activityList)) {
    activityRecordVOList = activityList.stream()
      .map(this::activityTOActivityRecordVO)
      .collect(Collectors.toList());
   }
  }
?
1
2
activityReceiveSendRecordVO.setActivityRecordVOList(new PageImpl<>(activityRecordVOList,
     pageable, activityRecordVOList.size()));

解析:傳入的pageable只在set進VO的時候,用new PageIml將List轉為page對象,前端報的問題 雖然總頁數、總條數均為正確,但第一頁的條數是全部 ,數據異常!

正確參考做法:

采用Specifications先根據查詢條件動態查詢并map出相應分頁對象(此塊代碼因需求而異),這時 findAll 傳入的pageable是生效的,便會顯現正確的分頁信息。

代碼塊參考:

xxxCommonSpecUtil 是自封的specification工具類,與原生spring data jpa原生查詢方法類似。

?
1
2
3
4
5
6
7
8
9
10
11
12
Page<ActivityRecordVO> page = new PageImpl<>(activityRecordVOList, pageable, activityRecordVOList.size());
  if (receiveSendRecordRequestVO.getSendOrReceiveType() == SendOrReceiveType.RECEIVE) {
   Specifications<ChallengeRecord> spec = Specifications.where(
     challengeCommonSpecUtil.equal("userId", userId))
     .and(challengeCommonSpecUtil.equal("deleteType", DeleteType.FALSE));
   page = challengeRecordDao.findAll(spec, pageable).map(this::challengeRecordToActivityRecordVO);
  } else if (receiveSendRecordRequestVO.getSendOrReceiveType() == SendOrReceiveType.SEND) {
   Specifications<Activity> spec = Specifications.where(
     activityCommonSpecUtil.equal("userId", userId))
     .and(activityCommonSpecUtil.equal("deleteType", DeleteType.FALSE));
   page = activityDao.findAll(spec, pageable).map(this::activityTOActivityRecordVO);
  }

注:activityReceiveSendRecordVO為封裝的VO,包含了返回的Page對象

?
1
activityReceiveSendRecordVO.setActivityRecordVOList(page);

總結

使用了這么長時間spring data jpa,覺得Specifications巨好用,也不容易出錯,也是我喜歡的編碼風格,而new PageImpl<>()這種簡單粗暴的方法我一般都用在查詢數據關聯太多表的情況,在最后直接返回,更深層次的還需要再探討!

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

原文鏈接:http://www.jianshu.com/p/cec7005ce17c

延伸 · 閱讀

精彩推薦
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 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 国产成人99久久亚洲综合精品 | 黄色精品网站 | 亚洲美女久久 | 91麻豆精品国产91久久久更新时间 | 亚洲一区二区三区久久久 | 日本激情视频一区二区三区 | 亚洲国产精品一区二区久久 | 国产高清亚洲 | 激情久久久| 欧美在线视频网 | 中文字幕啪啪 | 久久精品国产亚洲一区二区三区 | 午夜国产精品成人 | 伊人网视频在线 | 成人在线观看网 | 91久久久久久久久 | 天天看夜夜爽 | 一区二区三区中文字幕 | 国产精品成人一区二区三区夜夜夜 | 久久精国产 | 精品一区久久 | 在线观看免费黄视频 | 国产成人精品一区二区三区 | 黑人中文字幕一区二区三区 | 中文字幕一区二区三区四区五区 | 国产精品一区二区三区四区 | 麻豆一区二区三区 | 久久精品久久久久久久久久16 | 噜噜噜噜噜色 | 久久久亚洲国产美女国产盗摄 | 第一色网站 | 午夜精品久久久久久久久 | 天天插天天操 | 国产一区二区三区免费视频 | 黄色影院| 天天色成人综合网 | 亚洲国产成人av | 狠狠综合久久 | 欧美精品在线观看 | 久久久久久久国产精品 | 亚洲一区二区三区久久久 |