亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

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

2024-07-13 10:14:39
字體:
來源:轉載
供稿:網友

前言

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內,返回數據包括了分頁數據

@ApiModelProperty("記錄")private Page<ActivityRecordVO> activityRecordVOList;@ApiModelProperty("數量")private Integer num = 0;@ApiModelProperty("金額")private BigDecimal totalMoney = BigDecimal.valueOf(0);

錯誤運用:

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());   }  }
activityReceiveSendRecordVO.setActivityRecordVOList(new PageImpl<>(activityRecordVOList,     pageable, activityRecordVOList.size()));

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

正確參考做法:

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

代碼塊參考:

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

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對象

activityReceiveSendRecordVO.setActivityRecordVOList(page);

總結

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

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


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
自拍偷拍亚洲精品| 九九视频这里只有精品| 成人久久久久久久| 26uuu日韩精品一区二区| 亚洲欧美日韩一区二区三区在线| 国产日韩欧美中文在线播放| 最近2019免费中文字幕视频三| 国内伊人久久久久久网站视频| 亚洲最大av网站| 91国产视频在线播放| 在线亚洲国产精品网| 国产91|九色| 国产精品69av| 亚洲最大av网站| 中文字幕精品久久久久| 黑丝美女久久久| 亚洲香蕉成视频在线观看| 亚洲最大的网站| 91超碰中文字幕久久精品| 久久久av亚洲男天堂| 亚洲国产女人aaa毛片在线| 日本精品久久久| 欧美做受高潮电影o| 中文字幕在线观看日韩| 亚洲国产精品电影| 美女黄色丝袜一区| 精品国产拍在线观看| 国产精品稀缺呦系列在线| 久久精品国产亚洲一区二区| 亚洲精品91美女久久久久久久| 日韩av一区二区在线| 日韩欧美第一页| 久久久中精品2020中文| 亚洲国产精品视频在线观看| 欧美视频在线看| 国产综合久久久久久| 欧美亚洲另类在线| 日韩女优在线播放| 久久久亚洲影院| 久久影院中文字幕| 欧美激情精品久久久久久黑人| 久久久视频在线| 亚洲一区二区三区香蕉| 欧美有码在线观看| 亚洲aⅴ日韩av电影在线观看| 亚洲一区二区三区xxx视频| 自拍亚洲一区欧美另类| 成人欧美在线视频| 欧美猛交ⅹxxx乱大交视频| 最近2019中文字幕在线高清| 欧美性视频网站| 国产精品一久久香蕉国产线看观看| 成人深夜直播免费观看| 欧美成人午夜剧场免费观看| 亚洲xxxx在线| 最近2019中文字幕在线高清| 96sao精品视频在线观看| 51午夜精品视频| 久久精品中文字幕免费mv| 日韩欧美中文字幕在线播放| 国产亚洲精品成人av久久ww| 一本一本久久a久久精品综合小说| 国产亚洲日本欧美韩国| 亚洲日韩中文字幕| 欧美电影免费观看网站| 国产精品第一区| 国产成人精品a视频一区www| 亚洲a在线播放| 亚洲男人天堂久| 欧美激情久久久| 成人福利网站在线观看| 国产有码一区二区| 成人精品视频99在线观看免费| 亚洲日本欧美日韩高观看| 福利二区91精品bt7086| 国产又爽又黄的激情精品视频| 91视频免费网站| 国产成人精品视频在线观看| 国内外成人免费激情在线视频| 亚洲国产精品热久久| 久久精品国产精品亚洲| 亚洲精品美女在线观看播放| 亚洲美女av黄| 亚洲午夜激情免费视频| 97精品国产aⅴ7777| 国内精品模特av私拍在线观看| 久久久久中文字幕| 日韩美女主播视频| 国产成人精品久久二区二区| 久久综合亚洲社区| 国产乱肥老妇国产一区二| 国产精品av在线播放| 91久久精品在线| 亚洲精品电影网在线观看| 日韩欧美在线观看视频| 国产精品久久久精品| 亚洲一区二区三区四区视频| 国产精品免费久久久| 欧美性极品xxxx娇小| 18一19gay欧美视频网站| 91po在线观看91精品国产性色| 久久天堂av综合合色| 欧美日韩国产中文字幕| 欧美一区二区影院| 成人免费午夜电影| 亚洲国产精品国自产拍av秋霞| 亚洲国产欧美一区二区三区久久| 国产精品男人的天堂| 亚洲精品免费av| 亚洲精品久久久久中文字幕欢迎你| 久久精品欧美视频| 欧美理论电影在线播放| 欧美极品在线播放| 亚洲视频在线播放| 国产免费成人av| 91精品国产综合久久男男| 国产精品扒开腿爽爽爽视频| 奇米成人av国产一区二区三区| 精品久久久久久中文字幕大豆网| 久久精品视频在线观看| 亚洲欧美日韩国产精品| 亚洲第一色在线| 亚洲香蕉成视频在线观看| 成人亚洲欧美一区二区三区| 亚洲色图35p| 日本久久久a级免费| 欧美黄色三级网站| 亚洲乱码国产乱码精品精天堂| 久久精品2019中文字幕| 亚洲国产精品国自产拍av秋霞| 欧美成人精品在线视频| 欧美成人四级hd版| 亚洲天堂精品在线| 国产成人a亚洲精品| 国产精品视频久| 日韩精品久久久久久久玫瑰园| 国产性猛交xxxx免费看久久| 成人精品一区二区三区电影黑人| 欧美电影在线观看网站| 庆余年2免费日韩剧观看大牛| 91久久嫩草影院一区二区| 久久久久久网址| 青青久久av北条麻妃黑人| 精品视频偷偷看在线观看| 国产精品香蕉国产| 久久久国产精彩视频美女艺术照福利| 国内自拍欧美激情| 亚洲一区二区久久久久久久| 欧美日本在线视频中文字字幕| 欧美丝袜一区二区三区| 清纯唯美日韩制服另类| 亚洲视频综合网| 97国产在线视频| 国产一区二区三区精品久久久| 91中文字幕在线观看| 欧美日韩国产999| 国产精品96久久久久久又黄又硬| 国产精品va在线播放我和闺蜜| 高潮白浆女日韩av免费看| 成人免费黄色网| 欧美成人一区在线| 国产v综合v亚洲欧美久久| 亚洲一区二区三区成人在线视频精品| 国产日韩一区在线|