1. Retraso de carga
ResultMap puede implementar el mapeo avanzado (utilizando la asociación y la recopilación para implementar el mapeo uno a uno y uno a muchos). La asociación y la colección tienen funciones de carga perezosa.
Carga de retraso: Primera consulta desde una sola tabla y luego asocie la consulta desde la tabla asociada cuando sea necesario, mejorando en gran medida el rendimiento de la base de datos, porque consultar una sola tabla es más rápido que consultar múltiples tablas.
Configurar en el archivo de configuración de MyBatis Core:
LazyLoadingEnabled, agressvulazyloading
Ajustes | describir | Valores permitidos | valor predeterminado |
lazyloadingEnabled | Configuración global Carga perezosa. Si se establece en 'falso', todos los asociados se inicializarán y cargarán. | Verdadero | FALSO | FALSO |
agresivo de carga | Cuando se establece en 'Verdadero', los objetos de carga perezosos pueden ser cargados por todas las propiedades perezosas. De lo contrario, cada propiedad se carga según sea necesario. | Verdadero | FALSO | verdadero |
<nettings> <setting name = "LazyLoadingEnabled" value = "true"/> <setting name = "agressiveLAyLoading" value = "false"/> </etenchings>
ocasión:
Cuando solo se necesitan algunos registros consultando otra información, se pueden retrasar la carga según sea necesario. Cuando se requiere la consulta asociada, SQL se emitirá a la base de datos para mejorar el rendimiento de la base de datos.
Cuando se necesita toda la información de consulta asociada, no hay necesidad de retrasar la carga en este momento, simplemente devuelva toda la información de consulta asociada. Puede usar Resulttype o ResultMap para completar la asignación.
Dos: Caso: (uno a muchos en departamento y empleados)
Introducción del código fuente:
1.Dept.Java
paquete cn.zhang.entity; import java.util.hashset; import java.util.set; de departamento de clase pública {privado entero deptno; DeptName de cadena privada; SET privado <EMP> emp = new Hashset <Emp> (); @Override public String toString () {return "de departamento =" + departamento + ", de departamento =" + departamento + ", 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 = de deptname; } set público <Emp> getemp () {return emp; } public void setemp (set <emb> emp) {this.emp = emp; }}2. Emp.java
paquete cn.zhang.entity; public class emp {private entero empno; string private 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
paquete cn.zhang.util; import java.io.ioException; import java.io.reader; import org.apache.io.io.resources; importar org.apache.ibatis.session.sqlsession; import.apache.ibatis.session.sqlsession; import og.apache.ibatis.session.session; org.apache.ibatis.session.sqlsessionFactoryBuilder;/*** clase de herramienta**/public class myBatisUtil {private static string config = "mybatis-config.xml"; Lector de lector estático; static {try {reader = recursos.getResourceAsreader (config); } catch (ioException e) {E.PrintStackTrace (); }} private sqlsessionFactory factory = new SqlSessionFactoryBuilder () .Build (lector); // Proporcionar un método que pueda obtener la sesión pública sqlsession sqlsession getSession () lanza ioexception {sqlsession session = factory.opensession (); sesión de regreso; }}4.Deptdao.Java
paquete cn.zhang.dao; import java.io.ioException; import cn.zhang.entity.dept; public interfaz deptdao { / ** * consulta el registro especificado * @return * @throws ioexception * / public findByid (ID integer) lanza ioexception;}5.Deptdao.xml
<? xml versión = "1.0" encoding = "utf-8"?> <! Doctype Mappperpublic "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace = "cn.zhang.dao.deptdao"> <!-3. Información de la consulta del empleado basada en ID de empleado-> <select id = "selectEmpByDeptno" resultType = "emp"> seleccionar empno, empname de empeñido de feptNo =#{dePTNO} </select> <!-2. Mapeo de la entidad del departamento-> <resultado TIPEMAP " id = "DePptMapper"> <id Property = "Deptno" column = "Deptno" /> <resultado Property = "Deptname" column = "DeptName" /> <!-One to-Many Empleados relacionados con el departamento-> <!-Seleccionar: consulta de empleados-<!-Columna: Condiciones requeridas para la consulta de empleados asociado (fuente de 1)--<Collection Property = "Emp" de OFType "Association select = "SelectEMPByDeptNo" columna = "Deptno" /> < /resultmap> <!-1. Consulta información del departamento basada en la identificación del departamento -> <select id = "findByid" resultmap = "departamento de departamento"> Seleccionar Deptno, DeptName de Dept Where DeptNo =#{DeptNo} </select> </mapper>6.mybatis-config.xml (la configuración para la carga perezosa está aquí)
<? xml versión = "1.0" encoding = "utf-8"?> <! DocType ConfigurationPublic "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <Configuration> <confán>!-Lazy Loadingenseical. Si es falso: entonces todos los asociados se inicializarán y cargarán. AgressliveLAyLoading: el valor predeterminado es verdadero. Cuando se establece en True, los objetos de carga perezosa pueden cargarse por cualquier atributo perezoso; De lo contrario, cada atributo se cargará según sea necesario. -> <Settings> <!-active el conmutador de carga retrasado-> <setting name = "lazyLoadingEnabled" value = "true" /> <!-Cambie la carga activa a la carga de mensajes que se está cargando como requerido-> <setting name = "agressiveLiveLAyLoading" value = "false" /> < /settings> <!-Configuración alias-> <typalles> <!-Método: Método: CONSTIVO ALISEA ALIMENTO ALIMENTO BY NAME TEDEME 2! El nombre de clase simple en el paquete especificado actualmente como alias-> <paquete name = "cn.zhang.entity" /> < /typealiases> <entornos default = "oracle"> <entorno id = "oracle"> <!-Transacciones usando jdbc-> <transaccionManager type = "jdbc" /> <!-usando el grupo de conexión incorporado-> <dataurce type = "boolAding" boolAding " Yo uso -> <propiedad name = "controlador" valor = "oracle.jdbc.driver.oracledriver" /> <propiedad name = "url" value = "jdbc: oracle: delgado: @localhost: 1521: orcl" /> <Property name = "username" value = "Study" /> <name de propiedad = "Valor de contraseña =" 123 " /> << /dataSource" <Mappers> <Mapper Resource = "CN/Zhang/Dao/DePTDAO.XML"/> </mappers> </Configuración>
7.Mytest.java (clase de prueba)
paquete cn.zhang.test; // uno a-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; importación; importar; import cn.zhang.util.mybatisutil; public class mytest {Deptdao dao; @Bebore public void initData () lanza ioexception {sqlsession session = myBatisUtil.getSession (); dao = session.getMapper (Deptdao.class); } / *** Consulta el registro especificado* @throws ioexception* / @test public void findall () lanza ioexception {departamento deptop = dao.findbyid (1); System.out.println (departamento); }}Resultados de la prueba:
Punto de quiebre debajo
Situación 1: Sin configuración en mybatis-config.xml
Situación 2: Configurar en MyBatis-Config.xml
<nettings> <!-active el interruptor de carga retrasado-> <setting name = "LazyLoadingEnabled" value = "true" /> <!-Cambie la carga activa a la carga de mensajes que se está cargando según sea necesario-> <setting name = "agressaveLiveAyLoading" value = "false" /> </etnentings>
Siguiente paso:
F6 siguiente paso:
F6 Siguiente paso: escriba el nombre del empleado
Situación 3:
F6 siguiente paso:
F6 SIGUIENTE: Imprima el nombre del empleado
Lo anterior es la carga de retraso en MyBatis presentada por el editor. Espero que te sea útil. Si tiene alguna pregunta, déjame un mensaje y el editor le responderá a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!