คำนำ
การแนะนำขั้นพื้นฐานเกี่ยวกับ Spring-Data-JPA: เหตุผลในการเกิดของ JPA คือการรวมกรอบ ORM ของบุคคลที่สามและสร้างวิธีมาตรฐาน สารานุกรม Baidu กล่าวว่า JDK กำลังพัฒนาในทิศทางนี้เพื่อให้บรรลุความเป็นเอกภาพของ ORM อย่างไรก็ตามยังไม่ได้ดำเนินการอย่างเต็มที่ ในกรอบ ORM Hibernate เป็นกองทัพขนาดใหญ่ที่ใช้กันอย่างแพร่หลายสะดวกสบายและมีความสามารถที่แข็งแกร่ง ในเวลาเดียวกันไฮเบอร์เนตก็รวมเข้ากับ JPA ได้ดีเช่นกัน เราสามารถคิดได้ว่า JPA เป็นมาตรฐานและในความเป็นจริง JPA เป็นส่วนต่อประสานเกือบทั้งหมดและการใช้งานทั้งหมดทำโดย Hibernate จากมุมมองของแมโครไฮเบอร์เนตทำงานได้ดีภายใต้การรวมกันของ JPA
เมื่อเร็ว ๆ นี้ฉันใช้สปริงบูทและสปริงข้อมูล JPA การใช้ JPA สามารถทำให้ฉันสะดวกในการใช้งานฐานข้อมูล แต่ฉันได้พบกับข้อผิดพลาดมากมายในระหว่างการใช้งาน ฉันจะบันทึกบทความต่อไปนี้ ฉันจะไม่พูดด้านล่างมากนัก มาดูการแนะนำรายละเอียดร่วมกันกันเถอะ
ฉาก:
แบบสอบถามแบบไดนามิก, การสืบค้นเพจ, การสืบค้นตารางข้อมูลที่แตกต่างกันตามสถานะต่าง ๆ ที่ผ่านและใช้แผนที่เพื่อแปลง VO ก่อนที่จะผ่านในวัตถุหน้า สถานที่ที่ใช้ในการใช้งานที่แตกต่างกันมีผลต่อความถูกต้องของข้อมูลเพจดังนั้นเราจะหารือกัน
หลักฐาน:
วัตถุหน้าถูกล้อมรอบใน VO และข้อมูลการส่งคืนรวมถึงข้อมูลหน้าเพจ
@ApimodelProperty ("บันทึก") หน้าส่วนตัว <ActionRecordvo> ActivityRecordVolist; @ApimodelProperty ("ปริมาณ") จำนวนเต็มส่วนตัว num = 0; @ApimodelProperty ("จำนวน") BigDecimal TotalMoney ส่วนตัวแอปพลิเคชันไม่ถูกต้อง:
รายการ <ActiveRecordVo> ActivityRecordVolist = new ArrayList <> (); if (ได้รับ () () == sendorreceivetype.receive) {list <challengerecord> challengerecordlist = challengerecorddao.findbyuseridanddeletype (userid, deletetype.false. if (! collectionutils.isempty (challengerecordlist)) {activityRecordVolist = challengerecordlist.stream () .map (นี่ :: challengerecordtoactivityRecordvo) .collect (collectors.tolist ()); }} อื่นถ้า (รับ recordrequestvo.getsendorreceivetype () == sendorreceivetype.send) {รายการ <ctivity> activityList = activityDao.findbyUseridandDeleType if (! collectionutils.isempty (activityList)) {activityRecordVolist = activityList.stream () .map (นี่ :: activitytoactivityRecordvo) .collect (collectors.tolist ()); -ActivityReceiveSendRecordVo.SetActivityRecordVolist (ใหม่ PageImpl <> (ActivityRecordVolist, Pageable, ActivityRecordVolist.size ()));
การวิเคราะห์: PAGABLE PAGABLE ใช้เฉพาะ PAGEIML ใหม่เพื่อแปลงรายการเป็นวัตถุหน้าเมื่อตั้งค่าเป็น VO แม้ว่าจำนวนหน้าทั้งหมดและจำนวนบรรทัดทั้งหมดที่รายงานในส่วนหน้านั้นถูกต้อง แต่จำนวนบรรทัดในหน้าแรกคือทั้งหมดและข้อมูลผิดปกติ!
วิธีการอ้างอิงที่ถูกต้อง:
ใช้ข้อมูลจำเพาะเพื่อสืบค้นแบบไดนามิกและแมปวัตถุเพจที่เกี่ยวข้องตามเงื่อนไขการสืบค้น (รหัสบล็อกนี้แตกต่างกันไปตามข้อกำหนด) ในเวลานี้การส่งผ่านใน FindAll นั้นมีประสิทธิภาพและข้อมูลการเพจที่ถูกต้องจะปรากฏขึ้น
การอ้างอิงบล็อกรหัส:
XXXCOMMONSPECUTIL เป็นคลาสเครื่องมือข้อกำหนดที่ประกาศตัวเองซึ่งคล้ายกับวิธีการสืบค้น Native Native Data Native Native
Page <ActiveRecordVo> หน้า = ใหม่ PageImpl <> (ActivityRecordVolist, Pageable, ActivityRecordVolist.size ()); if (ได้รับ recordrequestvo.getsendorreceivetype () == sendorreceivetype.receive) {ข้อมูลจำเพาะ <CHOLLENGERECORD> ข้อมูลจำเพาะ = ข้อมูลจำเพาะทุกที่ หน้า = challengerecorddao.findall (ข้อมูลจำเพาะ, pageable) .map (นี่ :: challengerecordtoactivityRecordvo); } อื่นถ้า (ได้รับ recordrequestvo.getsendorreceivetype () == sendorreceivetype.send) {ข้อมูลจำเพาะ <adives> spec = ข้อมูลจำเพาะที่ไหน Page = ActivityDao.findall (ข้อมูลจำเพาะ, pageable) .map (นี่ :: activitytoactivityRecordvo); -หมายเหตุ: ActivityReceiveSendRecordvo ถูกห่อหุ้ม VO ซึ่งมีวัตถุหน้าส่งคืน
ActivityReceiveSendRecordvo.SetActivityRecordVolist (หน้า);
สรุป
หลังจากใช้ Spring Data JPA มานานฉันคิดว่าข้อมูลจำเพาะมีประโยชน์มากและไม่มีแนวโน้มที่จะเกิดข้อผิดพลาด นอกจากนี้ยังเป็นสไตล์การเข้ารหัสที่ฉันชอบ อย่างไรก็ตามฉันมักจะใช้วิธีการที่เรียบง่ายและหยาบของ PageImpl ใหม่ <> () เพื่อสอบถามข้อมูลและเชื่อมโยงตารางมากเกินไป ฉันจะกลับมาโดยตรงในตอนท้าย ต้องมีการหารือระดับที่ลึกขึ้นอีกครั้ง!
โอเคข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่าเนื้อหาของบทความนี้จะมีค่าอ้างอิงบางอย่างสำหรับการศึกษาหรือที่ทำงานของทุกคน หากคุณมีคำถามใด ๆ คุณสามารถฝากข้อความไว้เพื่อสื่อสาร ขอบคุณสำหรับการสนับสนุน Wulin.com