1. การโหลดล่าช้า
ResultSmap สามารถใช้การแมปขั้นสูง (ใช้การเชื่อมโยงและการรวบรวมเพื่อใช้การทำแผนที่แบบหนึ่งต่อหนึ่งและหนึ่งต่อหลาย) การเชื่อมโยงและคอลเลกชันมีฟังก์ชั่นการโหลดขี้เกียจ
การโหลดล่าช้า: แบบสอบถามแรกจากตารางเดียวจากนั้นเชื่อมโยงการสืบค้นจากตารางที่เกี่ยวข้องเมื่อจำเป็นให้ปรับปรุงประสิทธิภาพของฐานข้อมูลอย่างมากเนื่องจากการสืบค้นตารางเดียวนั้นเร็วกว่าการสืบค้นหลายตาราง
กำหนดค่าในไฟล์กำหนดค่า MyBatis Core:
lazyloadingenabled, aggressivelazyloading
การตั้งค่า | อธิบาย | ค่าที่อนุญาต | ค่าเริ่มต้น |
lazyloadingenabled | การตั้งค่าทั่วโลกกำลังโหลดขี้เกียจ หากตั้งค่าเป็น 'เท็จ' สิ่งที่เกี่ยวข้องทั้งหมดจะเริ่มต้นและโหลด | จริง | เท็จ | เท็จ |
aggressivelazyloading | เมื่อตั้งค่าเป็น 'จริง' วัตถุที่กำลังโหลดขี้เกียจอาจถูกโหลดโดยคุณสมบัติที่ขี้เกียจทั้งหมด มิฉะนั้นคุณสมบัติแต่ละคุณสมบัติจะถูกโหลดตามต้องการ | จริง | เท็จ | จริง |
<การตั้งค่า> <การตั้งค่าชื่อ = "lazyloadingenabled" value = "true"/> <setting name = "aggressivelazyloading" value = "false"/> </settings>
โอกาส:
เมื่อมีเพียงบันทึกบางอย่างที่จำเป็นต้องมีการสืบค้นข้อมูลอื่น ๆ พวกเขาสามารถโหลดล่าช้าได้ตามต้องการ เมื่อจำเป็นต้องมีการสืบค้นที่เกี่ยวข้อง SQL จะถูกส่งไปยังฐานข้อมูลเพื่อปรับปรุงประสิทธิภาพของฐานข้อมูล
เมื่อต้องการข้อมูลการสืบค้นที่เกี่ยวข้องทั้งหมดไม่จำเป็นต้องชะลอการโหลดในเวลานี้เพียงส่งคืนข้อมูลการสืบค้นที่เกี่ยวข้องทั้งหมด คุณสามารถใช้ ResultType หรือ ResultSmap เพื่อทำการแมปให้เสร็จสมบูรณ์
สอง: กรณี: (หนึ่งถึงหลายคนในแผนกและพนักงาน)
ซอร์สโค้ดบทนำ:
1.Dept.java
แพ็คเกจ cn.zhang.entity; นำเข้า java.util.hashset; นำเข้า java.util.set; Dept ระดับสาธารณะ {Deptno ส่วนตัว String Private String DEPTNAME; ชุดส่วนตัว <EMP> emp = new hashset <EMP> (); @Override สตริงสาธารณะ toString () {return "deptno =" + deptno + ", deptName =" + deptName + ", emp =" + emp + "]"; } จำนวนเต็มสาธารณะ getDeptNo () {return deptno; } โมฆะสาธารณะ setDeptNo (Integer Deptno) {this.deptno = deptno; } สตริงสาธารณะ getDeptName () {return deptName; } โมฆะสาธารณะ setDeptName (string deptName) {this.deptName = deptName; } ชุดสาธารณะ <EMP> getEMP () {return emp; } โมฆะสาธารณะ setEMP (SET <EMP> EMP) {this.EMP = EMP; -2.EMP.JAVA
แพ็คเกจ CN.ZHANG.ENTITY; ระดับสาธารณะ EMP {เอกชนจำนวนเต็ม EMPNO; empname สตริงส่วนตัว; @Override สตริงสาธารณะ toString () {return "emp [empno =" + empno + ", empname =" + empname + "]"; } จำนวนเต็มสาธารณะ getempno () {return empno; } โมฆะสาธารณะ setempno (จำนวนเต็ม empno) {this.empno = empno; } สตริงสาธารณะ getEmpName () {return empname; } โมฆะสาธารณะ setEmpName (string empname) {this.empname = empname; -3.MyBatisutil.java
แพ็คเกจ cn.zhang.util; นำเข้า java.io.ioexception; นำเข้า java.io.reader; นำเข้า org.apache.ibatis.io.resources; นำเข้า org.apache.ibatis.session.sqlsession; นำเข้า org.apache.ibatis.session.sqlsession org.apache.ibatis.session.sqlsessionfactorybuilder;/*** คลาสเครื่องมือ**/คลาสสาธารณะ mybatisutil {สตริงคงที่ส่วนตัว config = "mybatis-config.xml"; เครื่องอ่านผู้อ่านแบบคงที่; คงที่ {ลอง {reader = resources.getResourceAsreader (config); } catch (ioexception e) {e.printstacktrace (); }} ส่วนตัว SQLSessionFactory โรงงาน = ใหม่ SQLSessionFactoryBuilder () .build (ผู้อ่าน); // ให้วิธีการที่สามารถรับเซสชันสาธารณะ sqlsession getSession () พ่น IOException {sqlsession session = factory.opensession (); เซสชั่นกลับ; -4.Deptdao.java
แพ็คเกจ cn.zhang.dao; นำเข้า java.io.ioexception; นำเข้า cn.zhang.entity.dept; อินเตอร์เฟสสาธารณะ deptdao { / ** * สอบถามบันทึกที่ระบุ * @return * @throws ioexception *5.Deptdao.xml
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <! doctype mappperpublic "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" namespace = "cn.zhang.dao.deptdao"> <!-3. ข้อมูลการสอบถามข้อมูลพนักงานตาม ID ของพนักงาน-> <select id = "selectempbydno" resultType = "emp"> เลือก Empno type = "dept" id = "deptmapper"> <id property = "deptno" คอลัมน์ = "deptno" /> <property result = "deptname" คอลัมน์ = "deptname" /> <! OFType = "EMP" select = "selectempByDeptNo" คอลัมน์ = "deptno" /> < /resultmap> <!-1 ข้อมูลแผนกแบบสอบถามตาม ID แผนก -> <select id = "findById" resultmap = "deptmapper"> เลือก Deptno, deptname จาก dept โดยที่ deptno =#{deptno} </select> </mapper>6.MyBatis-config.xml (การกำหนดค่าสำหรับการโหลดขี้เกียจอยู่ที่นี่)
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <! doctype configurationPublic "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd" เท็จ. ถ้าเท็จ: ทั้งหมดที่เกี่ยวข้องจะเริ่มต้นและโหลด aggressivelazyloading: ค่าเริ่มต้นเป็นจริง เมื่อตั้งค่าเป็น TRUE วัตถุที่ขี้เกียจโหลดอาจถูกโหลดโดยแอตทริบิวต์ที่ขี้เกียจใด ๆ มิฉะนั้นแต่ละแอตทริบิวต์จะถูกโหลดตามต้องการ -> <การตั้งค่า> <!-เปิดสวิตช์โหลดล่าช้า-> <การตั้งค่าชื่อ = "lazyloadingEnabled" value = "true" /> <!-เปลี่ยนการโหลดที่ใช้งานอยู่เป็นการโหลดข้อความที่โหลดตามที่ต้องการ-> <การตั้งค่าชื่อ = "aggressivelaxyloading" value = "false" /> < /settings> <การกำหนดค่า ใช้ชื่อคลาสง่าย ๆ ภายใต้แพ็คเกจที่ระบุในปัจจุบันเป็นนามแฝง-> <package name = "cn.zhang.entity" /> < /typealiases> <environment default = "oracle"> <environment id = "Oracle"> <! ฐานข้อมูลที่ฉันใช้ -> <property name = "driver" value = "oracle.jdbc.driver.oracledriver" /> <property name = "url" value = "jdbc: Oracle: Thin: @localhost: 1521: ORCL" /> </environments> <mappers> <mapper resource = "cn/zhang/dao/deptdao.xml"/> </mappers> </การกำหนดค่า>
7.mytest.java (คลาสทดสอบ)
แพ็คเกจ cn.zhang.test; // one-to-many import java.io.ioexception; นำเข้า org.apache.ibatis.session.sqlsession; นำเข้า org.junit.before; นำเข้า org.junit.test; นำเข้า cn.zhang.dao.deptdao; cn.zhang.util.mybatisutil; คลาสสาธารณะ mytest {deptdao dao; @Before โมฆะสาธารณะ initData () พ่น IOException {SQLSESSION SESSION = MyBatisUtil.getSession (); dao = session.getMapper (deptdao.class); } / *** สอบถามบันทึกที่ระบุ* @throws ioException* / @Test โมฆะสาธารณะ findall () พ่น IOException {Dept dept = dao.findbyId (1); System.out.println (Dept); -ผลการทดสอบ:
จุดพักด้านล่าง
สถานการณ์ที่ 1: ไม่มีการกำหนดค่าใน mybatis-config.xml
สถานการณ์ที่ 2: กำหนดค่าใน mybatis-config.xml
<การตั้งค่า> <!-เปิดสวิตช์โหลดล่าช้า-> <การตั้งค่าชื่อ = "lazyloadingenabled" value = "true" /> <!-เปลี่ยนการโหลดที่ใช้งานอยู่เป็นการโหลดข้อความที่โหลดตามต้องการ-> <การตั้งค่าชื่อ =
ขั้นตอนต่อไป:
F6 ขั้นตอนต่อไป:
F6 ขั้นตอนต่อไป: พิมพ์ชื่อพนักงาน
สถานการณ์ 3:
F6 ขั้นตอนต่อไป:
F6 ถัดไป: พิมพ์ชื่อพนักงาน
ข้างต้นคือการโหลดความล่าช้าใน mybatis ที่แนะนำโดยบรรณาธิการ ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!