1. تأخير التحميل
يمكن لـ ResultMap تنفيذ رسم الخرائط المتقدمة (باستخدام الارتباط والجمع لتنفيذ رسم الخرائط الفردية والفردية). الجمعية والجمع لها وظائف التحميل كسول.
تأخير التحميل: الاستعلام الأول من جدول واحد ، ثم ربط الاستعلام من الجدول المرتبط عند الحاجة ، تحسين أداء قاعدة البيانات بشكل كبير ، لأن الاستعلام عن جدول واحد أسرع من الاستعلام عن جداول متعددة.
تكوين في ملف التكوين الأساسي MyBatis:
lazyloadingenabled ، agressivelazyloading
إعدادات | يصف | القيم المسموح بها | القيمة الافتراضية |
LazyLoadingEnabled | الإعدادات العالمية تحميل كسول. إذا تم ضبطها على "FALSE" ، فسيتم تهيئة جميع تلك المرتبطة وتحميلها. | صحيح | خطأ شنيع | خطأ شنيع |
agressivelazyloading | عند ضبطها على "TRUE" ، قد يتم تحميل كائنات التحميل البطيئة بواسطة جميع الخصائص البطيئة. خلاف ذلك ، يتم تحميل كل خاصية حسب الحاجة. | صحيح | خطأ شنيع | حقيقي |
<Steptings> <STETTER NAME = "lazyloadingEnabled" value = "true"/> <setting name = "Aggressivelazyload" value = "false"/> </settings>
مناسبة:
عندما تحتاج بعض السجلات فقط إلى الاستعلام عن معلومات أخرى ، يمكن تأخير التحميل حسب الحاجة. عند الحاجة إلى الاستعلام المرتبط ، سيتم إصدار SQL إلى قاعدة البيانات لتحسين أداء قاعدة البيانات.
عندما تكون هناك حاجة إلى جميع معلومات الاستعلام المرتبطة بها ، ليست هناك حاجة لتأخير التحميل في هذا الوقت ، ما عليك سوى إرجاع جميع معلومات الاستعلام المرتبطة. يمكنك استخدام ResultType أو ResultMap لإكمال التعيين.
اثنان: القضية: (واحد إلى حد في القسم والموظفين)
مقدمة رمز المصدر:
1.Dept.java
Package cn.zhang.entity ؛ import java.util.hashset ؛ import java.util.set ؛ public class dept {private integer deptno ؛ قسم السلسلة الخاصة مجموعة خاصة <emp> emp = new hashset <EMP> () ؛ Override public string toString () {return "deptno =" + deptno + "، deptname =" + deptname + "، emp =" + emp + "]" ؛ } integer getDeptno () {return deptno ؛ } public void setDeptno (integer deptno) {this.deptno = deptno ؛ } السلسلة العامة getDeptName () {return deptname ؛ } public void setDeptName (سلسلة deptname) {this.deptName = deptname ؛ } مجموعة عامة <emp> getemp () {return emp ؛ } public void setemp (set <emp> emp) {this.emp = emp ؛ }}2.Pem.Emp.Java
Package Cn.Zhang.entity ؛ الطبقة العامة Emp {Private Integer Empno ؛ سلسلة خاصة empname ؛ Override public string toString () {return "emp [empno =" + empno + "، empname =" + empname + "]" ؛ } integer getempno () {return empno ؛ } public void setempno (integer empno) {this.empno = empno ؛ } السلسلة العامة getempname () {return empname ؛ } public void setMpName (string empname) {this.empname = empname ؛ }}3.Mybatisutil.java
package cn.zhang.util ؛ import java.io.ioException ؛ import java.io.riader ؛ import org.apache.ibatis.io.resources ؛ import org.apache.ibatis.session.sqlsession org.apache.ibatis.session.sqlsessionfactorybuilder ؛/*** فئة الأدوات**/الفئة العامة mybatisutil {private static string config = "mybatis-config.xml" ؛ قارئ قارئ ثابت ؛ ثابت {try {reader = resources.getResourCeasReader (config) ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }} static sqlsessionfactory factory = sqlsessionfactorybuilder () // توفير طريقة يمكن أن تحصل على جلسة SQLSession GetSession () SQLSession GetSession () IOException {SQLSession Session = Factory.OpenSession () ؛ جلسة العودة ؛ }}4.Deptdao.java
package cn.zhang.dao ؛ استيراد java.io.ioException ؛ استيراد cn.zhang.entity
5.deptdao.xml
<؟ مساحة الاسم = "cn.zhang.dao.deptdao"> <!-3. معلومات عن الموظف استنادًا إلى معرف الموظف-> <select id = "selectempbydeptno" resultType = "EMP"> حدد EMPNO ، EMPNAME من EMPNE WHERE DEPTNO =#{deptno} </select> <!-2. id = "deptmapper"> <id property = "deptno" column = "deptno" /> <result property = "deptname" column = "deptname" /> <!-on-to many experious from 1) <! SELECT = "SELICEMPBYDEPTNO" COMMONATION = "Deptno" /> < /resultmap> <!-1. معلومات قسم الاستعلام استنادًا إلى معرف القسم -> <حدد ID = "findById" resultMap = "deptmapper"> SELECT DEPTNO ، DEPTNAME من DEPT حيث deptno =#{deptno} </select> </mapper>6.MyBatis-Config.xml (التكوين للتحميل البطيء موجود هنا)
<؟ إذا كان خطأ: سيتم تهيئة جميع المرتبطة وتحميلها. Aggressivelazyloading: الافتراضي صحيح. عند التعيين على TRUE ، يمكن تحميل الكائنات المحملة كسول بأي سمات كسول ؛ خلاف ذلك ، سيتم تحميل كل سمة حسب الحاجة. -> <STEPTRESS> <!-قم بتشغيل مفتاح التحميل المتأخر-> <STETTER NAME = "LazyLoadingEnabled" value = "true" /> <!-تغيير التحميل النشط إلى تحميل الرسائل الذي يتم تحميله كما هو مطلوب-> <إعداد name = "aggressivelazyloading" اسم الفئة البسيط ضمن الحزمة المحددة حاليًا على أنه الاسم المستعار-> <package name = "cn.zhang.entity" /> < /typealiases> <البيئات default = "oracle"> <البيئة معرف = "oracle"> <!- قاعدة البيانات التي أستخدمها -> <name property = "driver" value = "oracle.jdbc.driver.oracledriver" /> <property name = "url" value = "jdbc: oracle: thin:@localhost: 1521: orcl" /> <property name = "username" value = </eversionments> <mappers> <mapper Resource = "Cn/Zhang/Dao/Deptdao.xml"/> </nybles> </isplicuration>
7.mytest.java (فئة الاختبار)
Package Cn.Zhang.test ؛ // On-to-many import java.io.ioException ؛ import org.apache.ibatis.session.sqlsession ؛ import org.junit.before ؛ import org.junit.test ؛ import cn.zhang.dao.deptdao ؛ import cn.zhang.entity.dept ؛ cn.zhang.util.mybatisutil ؛ الطبقة العامة mytest {deptdao dao ؛ before public void initData () يلقي ioException {sqlsession session = mybatisutil.getSession () ؛ dao = session.getMapper (deptdao.class) ؛ } / *** QUERY السجل المحدد* throws ioException* / test public void bindall () remows ioException {dept dept = dao.findbyid (1) ؛ System.out.println (Dept) ؛ }}نتائج الاختبار:
نقطة الاستراحة أدناه
الموقف 1: لا يوجد تكوين في mybatis-config.xml
الموقف 2: تكوين في mybatis-config.xml
<STEPTRESS> <!-قم بتشغيل مفتاح التحميل المتأخر-> <STETME NAME = "lazyloadingEnabled" value = "true" /> <!-قم بتغيير التحميل النشط إلى تحميل الرسائل الذي يتم تحميله حسب الحاجة-> <setting = "aggressivelazyload" value = "false" /> < /settings>
الخطوة التالية:
F6 الخطوة التالية:
F6 الخطوة التالية: اكتب اسم الموظف
الوضع 3:
F6 الخطوة التالية:
F6 التالي: اطبع اسم الموظف
ما سبق هو تأخير التحميل في MyBatis الذي قدمه لك المحرر. آمل أن يكون ذلك مفيدًا لك. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر إليك في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!