หลักการกลยุทธ์ขี้เกียจ: เฉพาะเมื่อมีการใช้ข้อมูลที่ส่งคืนโดย SQL แบบสอบถามจริง ๆ แล้วจะออกไปยังฐานข้อมูลมิฉะนั้นจะไม่ถูกออก (ส่วนใหญ่ใช้ในการสืบค้นร่วมของหลายตาราง)
1. การโหลดขี้เกียจแบบตัวต่อตัว:
สมมติว่ามีตารางบุคคลและตารางการ์ดในฐานข้อมูล: ตารางบุคคลมีฟิลด์ PID, PNAME, PAGE, PSEX, CID และตารางบัตรมีฟิลด์ CID, CNUM;
สมมติว่าคุณต้องการสอบถามชื่อและหมายเลขรหัสของใครบางคน:
หลักการ: เมื่อสอบถามชื่อเวอร์ชันจริงจะไม่สอบถามหมายเลข ID เฉพาะเมื่อสถานีปัจจุบันใช้หมายเลข ID จะออกคำค้นหาไปยังการ์ด มันเป็นกลยุทธ์ในการสอบถามหมายเลข ID;
ตัวอย่างการใช้งาน:
ขั้นตอนการใช้งาน:
1-Import Mybatis Pervateing Jar แพ็คเกจ
ไฟล์ 2-ADD log4j (สามารถดูโปรแกรมการดำเนินการจริงในหน่วยความจำ)
1 หลักการ: เฉพาะเมื่อสถานีปัจจุบันใช้หมายเลข ID ที่ใช้การสืบค้นไปยังการ์ดจะถูกออกมิฉะนั้นจะมีการสอบถามข้อมูลบุคคลเท่านั้น
2-Open Lazy: ใน conf.xml
<การตั้งค่า> <การตั้งค่าชื่อ = "lazyloadingenabled" value = "true"/> <setting name = "aggressivelazyloading" value = "false"/> </settings>
3. การใช้งาน:
(1) ในไฟล์การแมป mapper.xml:
<select id = "findcid" parameterType = "int" resultType = "การ์ด"> เลือก * จากการ์ดที่ cid =#{value} < /select> <resultmap type = "person" id = "p_c1"> <id column = "pid" property = "pid" /> column = "psex" คุณสมบัติ = "psex"/> <การเชื่อมโยงคุณสมบัติ = "การ์ด" javatype = "การ์ด" select = "findcid" คอลัมน์ = "cid"> </card> </resultmap> <select id = "selectpersonandcardlazybypid" parameterType = 1-select: ระบุคำสั่งค้นหาที่เกี่ยวข้อง
2 คอลัมน์: ระบุค่าของฟิลด์ในคำสั่งหลักที่ผ่านเป็นพารามิเตอร์ไปยังคำสั่ง Slave SQL
(2) กำหนดวิธีการในอินเทอร์เฟซ Mapper:
บุคคลสาธารณะ SelectPersonandCardLazyByPid (int PID);
(3) ผลการทดสอบโดยใช้ Junit:
1. นี่คือแบบสอบถามที่ส่งข้อมูลบุคคลเท่านั้น
@Test โมฆะสาธารณะ TestSelectPersonandCardLazyByPid () {// นโยบายขี้เกียจบุคคลหนึ่งต่อหนึ่ง p = PM.SelectPersonandCardLazyBypid (1); //system.out.println(p); System.out.println (P.GetPname ()+","); //system.out.println(p.getPname ()+","+P.GetCard (). getCnum ()); -คำสั่ง Query Execution Result:
2. คิวรีไปยังการ์ดจะออกเฉพาะเมื่อสถานีปัจจุบันใช้หมายเลข ID
@Test โมฆะสาธารณะ TestSelectPersonandCardLazyByPid () {// นโยบายขี้เกียจบุคคลหนึ่งต่อหนึ่ง p = PM.SelectPersonandCardLazyBypid (1); //system.out.println(p); System.out.println (P.GetPname ()+","); System.out.println (P.GetPname ()+","+P.GetCard (). getCnum ()); // การสืบค้นสำหรับการ์ดจะออกเมื่อสถานีปัจจุบันใช้หมายเลข ID}คำสั่ง Query Execution Result:
2. การโหลดขี้เกียจแบบหนึ่งถึงหลายครั้ง:
ตัวอย่างการใช้งาน:
สมมติว่ามีตารางบุคคลและตารางข้อมูลบัตรประจำตัวบัตรในฐานข้อมูลตารางที่อยู่ adder: ในกรณีที่มีฟิลด์ pid ในตารางบุคคล, pname, page, psex, cid, ตารางการ์ดและฟิลด์ CNUM ในตาราง adder; ตาราง adder มี Fields Aid, Ashi, PID
สมมติว่าคุณต้องการสอบถามชื่อและที่อยู่ของใครบางคนและหมายเลขประจำตัวของคุณ:
(1) ไฟล์การแมป mapper.xml:
<!-กลยุทธ์ขี้เกียจแบบหนึ่งต่อหลาย-> <select id = "fingcard_adder" parameterType = "int" resultType = "adder"> เลือก * จาก adder ที่ pid =#{value} </select> <select id = "findCid1" parameterType = "int" type = "person" id = "p_c1_a1"> <id column = "pid" คุณสมบัติ = "pid" /> <result column = "pname" property = "pname" /> <result column = "page" property = "page" /> <results = "psex" <collection property = "adder" OfType = "adder" select = "fingcard_adder" คอลัมน์ = "pid"> </collection> </resultmap> <select id = "selectPersonandCardDerDderLazyBypid" parameterType = "int" int "(2) วิธีการกำหนดอินเตอร์เฟส Mapper:
1. นี่คือแบบสอบถามที่ส่งข้อมูลบุคคลเท่านั้น
@Test โมฆะสาธารณะ TestSelectPersonandCardandDerLazyByPid () {// นโยบายขี้เกียจบุคคลหนึ่งถึงหลายคน p = PM.SelectPersonandCardandDerlazyBypid (1); System.out.println (p.getPname ()+","); //// นี่คือแบบสอบถามที่ส่งข้อมูลบุคคลเท่านั้น}คำสั่ง Query Execution Result:
2. นี่คือการสืบค้นเพื่อออกข้อมูลบุคคลและข้อมูลตัวตน
@Test โมฆะสาธารณะ TestSelectPersonandCardandDerLazyByPid () {// นโยบายขี้เกียจบุคคลหนึ่งถึงหลายคน p = PM.SelectPersonandCardandDerlazyBypid (1); System.out.println (p.getPname ()+","); // นี่คือแบบสอบถามที่ปล่อยข้อมูลบุคคลเท่านั้น System.out.println (P.GetPname ()+","+P.GetCard (). getCnum ()); // นี่คือแบบสอบถามที่ปล่อยข้อมูลบุคคลและข้อมูลประจำตัว; -คำสั่ง Query Execution Result:
3. การสืบค้นข้อมูลบุคคลข้อมูลข้อมูลประจำตัวและข้อมูลที่อยู่ออกมาที่นี่
@Test โมฆะสาธารณะ TestSelectPersonandCardandDerLazyByPid () {// นโยบายขี้เกียจบุคคลหนึ่งถึงหลายคน p = PM.SelectPersonandCardandDerlazyBypid (1); System.out.println (p.getPname ()+","); // นี่คือแบบสอบถามที่ปล่อยข้อมูลบุคคลเท่านั้น System.out.println (P.GetPname ()+","+P.GetCard (). getCnum ()); // นี่คือการสืบค้นที่ปล่อยข้อมูลบุคคลและข้อมูลประจำตัว; //system.out.println(p.getPname ()+","+P.GetCard (). getCnum ()); สำหรับ (adder adder: P.GetAdder ()) {//////สอบถามข้อมูลบุคคลข้อมูลข้อมูลประจำตัวและข้อมูลที่อยู่ออกมาที่นี่ System.out.println (adder.getashi ()); - คำสั่ง Query Execution Result:
สรุป
ข้างต้นเป็นวิธีการหน่วงเวลาในการโหลดกลยุทธ์ขี้เกียจใน mybatis แนะนำให้คุณรู้จัก ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉัน บรรณาธิการจะตอบกลับคุณทันเวลา!