머리말
Spring-Data-JPA에 대한 기본 소개 : JPA의 탄생 이유는 타사 ORM 프레임 워크를 통합하고 표준 방법을 설정하는 것입니다. Baidu Encyclopedia는 JDK가 ORM의 통일성을 달성하기 위해이 방향으로 발전하고 있다고 말합니다. 그러나 완전히 구현되지 않았습니다. ORM 프레임 워크에서 Hibernate는 널리 사용되고 편리하며 강력한 기능을 가지고 있습니다. 동시에, 최대 절전 모드는 JPA와 잘 통합되어 있습니다. 우리는 JPA가 표준이라고 생각할 수 있으며 실제로 JPA는 거의 모든 인터페이스이며 구현은 모두 최대 절전 모드로 수행됩니다. 거시적 관점에서, 최대 절전 모드는 JPA의 통일하에 매우 잘 작동합니다.
최근에 SpringBoot 및 Spring Data JPA를 사용하고 있습니다. JPA를 사용하면 데이터베이스를 더 편리하게 작동시킬 수 있지만 사용 중에 많은 함정이 발생했습니다. 다음 기사를 기록하겠습니다. 나는 아래에서 많이 말하지 않을 것입니다. 자세한 소개를 함께 살펴 보겠습니다.
장면:
동적 쿼리, 페이징 쿼리, 다른 상태에 따라 다른 데이터 테이블 쿼리, 페이지 객체를 전달하기 전에 MAP를 사용하여 VO를 변환합니다. Pagable의 다양한 사용 장소는 PAGED 데이터의 정확성에 영향을 미치므로 논의 할 것입니다.
전제:
페이지 객체는 VO에 밀폐되어 있으며 반환 데이터에는 PAGED 데이터가 포함됩니다.
@apimodelProperty ( "레코드") 개인 페이지 <CattiveRecordVo> ActivityRecordVolist; @apimodelProperty ( "수량") 개인 정수 num = 0; @apimodelProperty ( "aug") private bigdecimal totalmoney = bigdecimal.valueof (0);
잘못된 응용 프로그램 :
List <ActivityRecordVo> ActivityRecordVolist = New ArrayList <> (); if (수신 endrecordRequestVo.getSendorReceivetype () == SendorReceiveType.Receive) {list <CallengerEcord> challengereCordList = challengerEcordDao.FindByUserIdAndDetEtype (userId, deleteType.false); if (! collectionUtils.isempty (challengereCordList)) {activityRecordVolist = challengerEcordList.stream () .map (this :: challengerCordToActivityRecordVo) .collect (collectors.tolist ()); }} else if (receedEndRecorDrequestVo.getSendorReceiveType () == SendorReceiveType.Send) {list <ctivity> activityList = activityDao.FindByUserIdAndLetEtype (userId, deleteType.false); if (! collectionUtils.isempty (activityList)) {activityRecordVolist = activityList.stream () .map (this :: activityToActivityRecordVo) .collect (collectors.tolist ()); }}ActivityReceivesEndRecordVo.SetActIvityRecordVolist (New PageImpl <> (ActivityRecordVolist, Pagable, ActivityRecordVolist.size ()));
분석 : 통과 된 pagable은 새로운 pageiml을 사용하여 VO로 설정할 때 목록을 페이지 객체로 변환합니다. 프론트 엔드에보고 된 총 페이지 수와 총 라인 수는 정확하지만 첫 페이지의 줄 수는 모두이며 데이터는 비정상적입니다!
올바른 참조 방법 :
사양을 사용하여 쿼리 조건에 따라 해당 페이징 객체를 동적으로 쿼리하고 매핑합니다 (이 블록 코드는 요구 사항에 따라 다릅니다). 현재 Findall에 통과 된 Pagable이 효과적이며 올바른 페이징 정보가 표시됩니다.
코드 블록 참조 :
xxxcommonspecutil은 네이티브 스프링 데이터 JPA 기본 쿼리 메소드와 유사한 자체 선포 사양 도구 클래스입니다.
page <ctuctionrecordvo> page = new pageimpl <> (ActivityRecordVolist, pagable, activityrecordvolist.size ()); if (receiveSendRecordRequestVo.getSendorReceivetype () == SendorReceiveType.Receive) {사양 <CallengerEcord> Spec = 사양. page = challengerecorddao.findall (spec, pagable) .map (this :: challengerCordToActivitiveRecordVo); } else if (recevesendRecOdRequestVo.getSendorReceivetype () == SendOrrecEivetype.Send) {사양 <ctivity> spec = 사양. page = activityDao.findall (spec, pagable) .map (this :: activityToActivityRecordVo); }참고 : ActivityReceivesendRecordvo는 캡슐화 된 VO입니다.
ActivityReceivesEndRecordVo.SetActIvityRecordVolist (페이지);
요약
스프링 데이터 JPA를 오랫동안 사용한 후에는 사양이 매우 유용하고 오류가 발생하지 않는다고 생각합니다. 또한 제가 가장 좋아하는 인코딩 스타일입니다. 그러나 나는 일반적으로 새로운 pageimpl <> ()의 단순하고 원유 방법을 사용하여 데이터를 쿼리하고 너무 많은 테이블을 연결합니다. 나는 끝에 직접 돌아올 것이다. 더 깊은 수준을 다시 논의해야합니다!
좋아, 위는이 기사의 전체 내용입니다. 이 기사의 내용에 모든 사람의 연구 나 작업에 대한 특정 참조 가치가 있기를 바랍니다. 궁금한 점이 있으면 의사 소통을 위해 메시지를 남길 수 있습니다. Wulin.com을 지원 해주셔서 감사합니다.