1. Chargement de retard
ResultMap peut implémenter un mappage avancé (en utilisant l'association et la collection pour implémenter un mappage individuel et un à plusieurs). L'association et la collection ont des fonctions de chargement paresseuses.
Dégustez le chargement: première requête à partir d'une seule table, puis associez la requête à partir de la table associée en cas de besoin, améliorant considérablement les performances de la base de données, car l'interrogation d'une seule table est plus rapide que de l'interrogation de plusieurs tables.
Configurer dans MyBatis Core Configuration Fichier:
LazyLoadingEnabled, Agressivelazyloading
Paramètres | décrire | Valeurs autorisées | valeur par défaut |
LazylokingEnabled | Paramètres globaux Chargement paresseux. S'ils sont définis sur «False», tous les associés seront initialisés et chargés. | Vrai | FAUX | FAUX |
Téléchargement agressif | Lorsqu'il est défini sur «vrai», les objets de chargement paresseux peuvent être chargés par toutes les propriétés paresseuses. Sinon, chaque propriété est chargée au besoin. | Vrai | FAUX | vrai |
<messings> <paramètre name = "LazyLoadingEnabled" value = "true" /> <setting name = "AggressIvelAzyLoading" value = "false" /> </ Settings>
occasion:
Lorsque seuls certains enregistrements doivent être associés à interroger d'autres informations, ils peuvent être retardés de chargement selon les besoins. Lorsque la requête associée est requise, SQL sera émis dans la base de données pour améliorer les performances de la base de données.
Lorsque toutes les informations de requête associées sont nécessaires, il n'est pas nécessaire de retarder le chargement pour le moment, renvoyez simplement toutes les informations de requête associées. Vous pouvez utiliser ResultType ou ResultMap pour terminer le mappage.
Deux: cas: (un à plusieurs dans le département et les employés)
Introduction du code source:
1.Dept.java
package cn.zhang.entity; import java.util.hashset; import java.util.set; public class dept {private Integer Deptno; DeptName à chaîne privée; ensemble privé <emp> emp = new hashset <emp> (); @Override public String toString () {return "deptno =" + deptno + ", deptname =" + deptName + ", emp =" + emp + "]"; } public entier getDeptNo () {return DeptNo; } public void setDeptno (entier deptno) {this.deptno = deptno; } public String getDeptName () {return DeptName; } public void setDeptName (String DeptName) {this.deptName = deptName; } set public <mp> getEMP () {return emp; } public void setEmp (set <mp> emp) {this.emp = emp; }}2.Emp.java
package cn.zhang.entity; classe publique emp {entier privé empno; String privé empname; @Override public String toString () {return "emp [empno =" + empno + ", empname =" + empname + "]"; } public entier 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
package cn.zhang.util; import java.io.ioexception; import java.io.reader; import org.apache.ibatis.io.resources; import org.apache.ibatis.session.sqlsession; import org.apache.ibatis.Session.SQSESSESSE org.apache.ibatis.session.sqlSessionFactoryBuilder; / ** * Classe d'outils * * / classe publique MyBatisUtil {chaîne statique privée config = "MyBatis-Config.xml"; lecteur de lecteur statique; statique {try {reader = Resources.getResourceAsReader (config); } catch (ioException e) {e.printStackTrace (); }} private statique sqlSessionFactory Factory = new SqlSessionFactoryBuilder () .Build (lecteur); // Fournit une méthode qui peut obtenir la session publique statique SQLSession getSESSE () lève ioException {SQLSession Session = Factory.OpenSession (); Session de retour; }}4.deptdao.java
package cn.zhang.dao; import java.io.ioException; import cn.zhang.entity.dept; interface publique deptdao {/ ** * requête l'enregistrement spécifié * @return * @throws ioException * / public Dept FindById (Integer id) lance ioException;}5.deptdao.xml
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype MappPerpublic "- // Mybatis.org//dtd Mappeur 3.0 // En" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <maper namespace = "cn.zhang.dao.deptdao"> <! - 3. Informations sur les employés Basés sur l'id de l'employé -> <select id = "SelectEmpByDeptno" resultType = "emp"> Empno, empname from EMP où DeptNo = # {deptno} </le select> <! - 2. MACPING OF DUPERST TARTITES -> <ResultMap = "Dept" id = "DeptMapper"> <id Property = "DeptNo" Column = "DeptNo" /> <Result Property = "DeptName" Column = "DeptName" /> <! - One-to-Many Limelated Employeys -> <! - SELECT: Associated Employee Query -> <! - Column: Conditions requises pour l'employé associé query (Source From 1) -> <Collection Property = "Emple" OFTYPE = "Source From 1) ->> <Collection Property =" EMP "De l'employé =" Source à partir de 1) ->> <Collection Property = "EMP" De l'employée = " select = "SelectEmpByDeptNo" Column = "DeptNo" /> </ ResultMap> <! - 1. Informations sur le département de requête basée sur l'identifiant du département -> <select id = "findbyid" resultMap = "DeptMapper"> SELECT DEPTNO, DeptName from Dept Where Deptno = # {Deptno} </lect> </caper>6.Mybatis-Config.xml (La configuration du chargement paresseux est ici)
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype ConfigurationPublic "- // mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3config.dtd"> <configuration> FAUX. Si faux: alors tous les associés seront initialisés et chargés. AggressiveLyloading: la valeur par défaut est vraie. Lorsqu'ils sont définis sur true, les objets chargés de paresseux peuvent être chargés par tous les attributs paresseux; Sinon, chaque attribut sera chargé au besoin. -> <paramètres> <! - Activez le commutateur de chargement retardé-> <setting name = "LazyLoadingEnabled" value = "true" /> <! - Changer le chargement actif en chargement de messages qui est le chargement requis-> <paramètre name = "AggressIlazeryloging" value = "false" /> </ Settings> <! - Configuration Alias -> <typealiases> <! - Method 1: Customalize alias Nom - <! Le nom de classe simple sous le package actuellement spécifié comme alias -> <package name = "cn.zhang.entity" /> </ typealiases> <environnements default = "oracle"> <environnement id = "oracle"> <! J'utilise -> <propriété name = "driver" value = "oracle.jdbc.driver.oracledriver" /> <propriété name = "url" value = "jdbc: oracle: mince: @localhost: 1521: orcl" /> <propriété name = "username" value = "study" /> <propriété name = "mot de passe" value = "123" /> </ dataSource> <mappers> <mapper ressource = "cn / zhang / dao / deptdao.xml" /> </mappers> </fongucial>
7.Mytest.java (classe de test)
package cn.zhang.test; // one-to-many import java.io.ioexception; import org.apache.ibatis.session.sqlsession; import org.junit.before; import org.junit.test; import cn.zhang.dao.deptda; cn.zhang.util.mybatisutil; classe publique Mytest {deptdao dao; @Before public void initData () lève ioException {SQLSession Session = MybatisUtil.getSession (); dao = session.getmapper (deptdao.class); } / ** * requête l'enregistrement spécifié * @throws ioException * / @Test public void findall () lève ioException {dept dept = dao.findbyid (1); System.out.println (Dept); }}Résultats des tests:
Point de rupture ci-dessous
Situation 1: Aucune configuration dans Mybatis-Config.xml
Situation 2: Configurer dans mybatis-config.xml
<Settings> <! - Activez le commutateur de chargement retardé -> <paramètre name = "LazyLoadingEnabled" value = "true" /> <! - Modifiez le chargement actif en chargement de messages qui est le chargement selon les besoins -> <setting name = "AggressIlayLoading" value = "false" /> </ Settings>
Étape suivante:
F6 Étape suivante:
F6 Étape suivante: Tapez le nom de l'employé
Situation 3:
F6 Étape suivante:
F6 Suivant: imprimez le nom de l'employé
Ce qui précède est le chargement de retard dans Mybatis qui vous est présenté par l'éditeur. J'espère que cela vous sera utile. Si vous avez des questions, veuillez me laisser un message et l'éditeur vous répondra à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!