1. Задержка загрузки
ResultMap может реализовать расширенное отображение (с использованием ассоциации и сбора для реализации картирования из одного к одному и одному ко многим). Ассоциация и коллекция имеют ленивые функции загрузки.
Задержка загрузки: первый запрос из одной таблицы, а затем ассоциируйте запрос из соответствующей таблицы, когда это необходимо, значительно улучшая производительность базы данных, поскольку запрос одной таблицы более быстрее, чем запросы несколько таблиц.
Настройка в файле конфигурации Mybatis Core:
LazyLoadEnabled, AggreSsivelazyLoading
Настройки | описывать | Разрешенные значения | значение по умолчанию |
LazyLoadEnabled | Глобальные настройки ленивая загрузка. Если установить на «false», все связанные инициализируются и загружены. | Верно | ЛОЖЬ | ЛОЖЬ |
Aggrevessivelazyloading | При установке на «true» ленивые объекты загрузки могут быть загружены всеми ленивыми свойствами. В противном случае каждое свойство загружается по мере необходимости. | Верно | ЛОЖЬ | истинный |
<Настройки> <Настройка name = "lazyLoadingEnabled" value = "true"/> <настройка name = "AggreSsivelaZyloading" value = "false"/> </settings>
повод:
Когда только некоторые записи должны быть связаны с запросом другой информации, их можно отложить по мере необходимости. Когда требуется связанный запрос, SQL будет выпущен в базу данных для повышения производительности базы данных.
Когда необходима вся связанная информация о запросе, в настоящее время нет необходимости откладывать загрузку, просто верните всю связанную информацию о запросе. Вы можете использовать ResultType или ResultMap для завершения отображения.
Два: случай: (от одного ко многим в отделе и сотрудниках)
Введение исходного кода:
1.dept.java
Пакет cn.zhang.entity; import java.util.hashset; import java.util.set; отдельный класс {частное целочисленное отделение; частная строковая отдела; частный набор <emp> emp = new Hashset <emp> (); @Override public String toString () {return "deptno =" + deptno + ", deptname =" + deptname + ", emp =" + emp + "]"; } public integer getDeptno () {return deptno; } public void setDeptno (integer deptno) {this.deptno = deptno; } public String getDeptName () {return deptName; } public void setDeptName (String deptName) {this.DeptName = deptName; } public set <emp> getEmp () {return emp; } public void setemp (set <emp> emp) {this.emp = emp; }}2. EMP.Java
Пакет cn.zhang.entity; public class emp {private integer empno; Private String Empname; @Override public String toString () {return "emp [empno =" + empno + ", empname =" + empname + "]"; } public integer getEmpno () {return empno; } public void setEmpno (integer empno) {this.empno = empno; } public String getEmpName () {return empname; } public void setEmpName (string empname) {this.empname = empname; }}3.mybatisutil.java
пакет cn.zhang.util; импорт java.io.ioexception; import java.io.reader; импорт org.apache.ibatis.io.resources; импорт org.apache.ibatis.session.sqlsession; импорт org.apache.ibatis.session.sqlsessionFactory; импорт org.Apache.ibatis. org.apache.ibatis.session.sqlsessionFactoryBuilder;/*** Класс инструмента**/public class mybatisutil {private Static String config = "mybatis-config.xml"; Статический читатель читателя; static {try {Reader = resources.getResourCeasReader (config); } catch (ioException e) {e.printstackTrace (); }} private static sqlSessionFactory factory = new sqlSessionFactoryBuilder () .build (читатель); // предоставить метод, который может получить сеанс публичного статического sqlSession getSession (), выбрасывает ioException {sqlSession session = factory.opensession (); возвратный сеанс; }}4. Deptdao.java
Пакет cn.zhang.dao; import java.io.ioexception; import cn.zhang.entity.dept; public interface deptdao { / ** * Запрос указанной записи * @return * @throws ioexception * / public deptbyid (integer id)5. Deptdao.xml
<? xml version = "1.0" Encoding = "UTF-8"?> <! DOCTYPE MAPPPERPUBLIC "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper.org/dtd/mybatis-3-mapper.dtd " namespace = "cn.zhang.dao.deptdao"> <!-3. Запрос информации о сотруднике, основанной на идентификаторе сотрудника-> <select id = "selectempbydeptno" refultype = "emp"> select empno, empname из emp, где deptno =#{deptno} </select> <!-2. id = "deptmapper"> <id property = "deptno" column = "deptno" /> <result property = "deptname" column = "deptname" /> <!-Сотрудники, связанные с отделом,-> <!-SELECT: Associated Offeree-запрос-> <! SELECT = "SELECTEMPBYDEPTNO" COLMAN = "DEPTNO" /> < /resultMap> <!-1. Информация об отдела запроса на основе идентификатора отдела -> <select id = "findbyid" resultMap = "deptmapper"> выберите Deptno, DeptName из Dept, где deptno =#{deptno} </select> </mapper>6.mybatis-config.xml (здесь есть конфигурация для ленивой загрузки)
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype ConfigurationPublic "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <perifuduration> <! Если false: тогда все связанные будут инициализированы и загружены. AggressiveLazyLoading: по умолчанию верно. При установке True, ленивые объекты могут быть загружены любыми ленивыми атрибутами; В противном случае каждый атрибут будет загружен по мере необходимости. -> <Tradings> <!-Включите задержку переключателя загрузки-> <Настройка name = "LazyLoadEnabled" value = "true" /> <!-Изменить активную загрузку на загрузку сообщения, которая загружается по мере необходимости-> <Настройка = "AggrevessIvelAzyling" value = "false" /> < /settings> <!-конфигурация. Простое имя класса под указанным в настоящее время пакетом в качестве псевдонима-> <name = "cn.zhang.entity" /> < /typealiases> <среда default = "oracle"> <среда идентификатор = "oracle"> <!-Транзакции с использованием jdbc-> <transactionmanager type = "jdbc" /> <!-Использование пула встроенного соединения-> <dataScource = "! database I use --> <property name="driver" value="oracle.jdbc.driver.OracleDriver" /> <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" /> <property name="username" value="study" /> <property name="password" value="123" /> </dataSource> </environment> </ervenments> <mappers> <mapper resource = "cn/zhang/dao/deptdao.xml"/> </mappers> </configuration>
7.mytest.java (тестовый класс)
пакет cn.zhang.test; // one-to-many import java.io.ioexception; import org.apache.ibatis.session.sqlsession; импорт org.junit.fore; import org.junit.test; импорт. cn.zhang.util.mybatisutil; открытый класс mytest {deptdao dao; @Before public void initData () бросает ioException {sqlSession session = mybatisutil.getSession (); dao = session.getmapper (deptdao.class); } / *** Запросить указанную запись* @Throws ioException* / @test public void findall () throws ioException {dept dept = dao.findbyid (1); System.out.println (Dept); }}Результаты теста:
Перерыв в ниже
Ситуация 1: Нет конфигурации в mybatis-config.xml
Ситуация 2: настройка в mybatis-config.xml
<Tradings> <!-Включите задержку переключателя загрузки-> <Настройка name = "LazyLoadingEnabled" value = "true" /> <!-Изменить активную загрузку на загрузку сообщения, которая загружается по мере необходимости-> <Настройка = "AggreSsiveLyguling" value = "false" /> < /futtors>
Следующий шаг:
F6 Следующий шаг:
F6 Следующий шаг: введите имя сотрудника
Ситуация 3:
F6 Следующий шаг:
F6 Далее: распечатайте имя сотрудника
Выше приведено задержка задержки в Mybatis, представленную вам редактором. Я надеюсь, что это будет полезно для вас. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит вам вовремя. Большое спасибо за вашу поддержку сайту wulin.com!