1. 지연 로딩
ResultMap은 고급 매핑을 구현할 수 있습니다 (협회 및 컬렉션을 사용하여 일대일 및 일대일 매핑을 구현). 연관과 수집에는 게으른 하중 기능이 있습니다.
지연로드 : 단일 테이블의 첫 번째 쿼리를 한 다음 필요할 때 관련 테이블의 쿼리를 연결하여 데이터베이스 성능을 크게 향상시키는 것이 여러 테이블 쿼리보다 빠르기 때문에 데이터베이스 성능을 크게 향상시킵니다.
MyBatis Core 구성 파일에서 구성 :
LazyloadingEnabled, Aggressivelazyloading
설정 | 설명하다 | 허용 값 | 기본값 |
LazyloadingEnabled | 글로벌 설정 게으른 하중. 'false'로 설정되면 관련된 모든 것이 초기화되고로드됩니다. | 참 | 거짓 | 거짓 |
공격적 인 생물 로딩 | 'true'로 설정되면 게으른 로딩 객체는 모든 게으른 특성에 의해로드 될 수 있습니다. 그렇지 않으면 각 속성은 필요에 따라로드됩니다. | 참 | 거짓 | 진실 |
<settings> <setting name = "lazyloadingEnabled"value = "true"/> <setting name = "agatressivelazyloading"value = "false"/> </settings>
기회:
일부 레코드 만 다른 정보를 쿼리 해야하는 경우 필요에 따라로드가 지연 될 수 있습니다. 관련 쿼리가 필요한 경우 데이터베이스 성능을 향상시키기 위해 SQL이 데이터베이스에 발행됩니다.
모든 관련 쿼리 정보가 필요한 경우 현재로드를 지연시킬 필요가 없으며 관련 쿼리 정보를 모두 반환하십시오. resulttype 또는 resultmap을 사용하여 매핑을 완료 할 수 있습니다.
두 사람 : 사례 : (부서 및 직원의 일대일)
소스 코드 소개 :
1.dept.java
패키지 cn.zhang.entity; import java.util.hashset; import java.util.set; public class dept {private integer deptno; 개인 문자열 deptname; 개인 세트 <emp> emp = new Hashset <emp> (); @override public String tostring () {return "deptno =" + deptno + ", deptname =" + deptname + ", emp =" + emp + "]; } public Integer getDeptno () {return deptno; } public void setDeptno (정수 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 {개인 정수 empno; 개인 문자열 empname; @override public String tostring () {return "emp [empno =" + empno + ", empname =" + empname + "]; } public Integer getEmpno () {return empno; } public void setempno (정수 empno) {this.empno = empno; } public String getEmpname () {return empname; } public void setempName (String empname) {this.empname = empname; }}3. Mybatisutil.java
패키지 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.section.sqlsession factory; import org.apache.session.sqlsetication 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 (reader); // 세션을 가져올 수있는 메소드를 제공합니다. 공개 static sqlsession getsession ()는 ioexception {sqlsession session = factory.opensession (); 반환 세션; }}4.deptdao.java
PACKED CN.ZHANG.DAO; import java.io.ioException; import CN.ZHANG.ENTITY.DEPT; PUBLIC 인터페이스 DEPTDAO { / ** * 쿼리 지정된 레코드를 쿼리 * @return * @Throws IoException * / public dept findbyid (Integer ideception ioexception;}.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 namestd "> <!-3. 직원 ID를 기반으로 한 쿼리 직원 정보-> <select id = "selectempByDeptNo"resultType = "emp"> deptno =#{deptno} </select> <! <! <! <! <! <!-2. <resultmap type = "dept"id = "deptmappler"> <idpmappler "> column = "deptno" /> <result property = "deptname"column = "deptname" /> <!-일대일 부서 관련 직원-> <!-선택 : 관련 직원 쿼리-> <!-열 : 직원 query (1)-> <collection ""emp ""emp ""emp ""emptepteptno " </resultmap> <!-1. 부서 ID를 기반으로 한 쿼리 부서 정보 -> <select id = "findByid"resultmap = "deptMapper"> deptno, deptname에서 deptno =#{deptno} </select> </mapper>6.mybatis-config.xml (게으른로드 구성이 여기에 있습니다)
<? xml version = "1.0"alcoding = "utf-8"?> <! doctype configurationpublic "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <! 거짓. 거짓 인 경우 : 모든 관련이 초기화되고로드됩니다. 공격적 인 생물 로딩 : 기본값은 사실입니다. true로 설정되면 게으른로드 된 물체는 게으른 속성에 의해로드 될 수 있습니다. 그렇지 않으면 각 속성이 필요에 따라로드됩니다. -> <settings> <!-지연된로드 스위치 켜기-> <setting name = "lazyloadingEnabled"value = "true" /> <!-필요한대로로드하는 메시지로드로 활성화로드를 변경하십시오. 2 : 현재 지정된 패키지의 간단한 클래스 이름을 별칭으로 사용합니다-> <package name = "cn.zhang.entity" /> < /inflealiases> <환경 기본값 = "oracle"> <환경 id = "Oracle"> <!-JDBC를 사용한 트랜잭션-> <transactionManager type = "jdbc"/> <! <<tatouce type = "the the the the the the transoutmanager type ="jdbc "/> <! 사용 -> <속성 이름 = "driver"value = "oracle.jdbc.driver.oracledriver" /> <property name = "url"value = "jdbc : oracle : thin : @localhost : @localhost : 1521 : orcl" /> <property name = "username"value " /> <property name ="valess ""valess " </환경> <mappers> <Mapper Resource = "CN/Zhang/Dao/deptdao.xml"/> </mappers> </configuration>
7. mytest.java (테스트 클래스)
패키지 CN.ZHANG.TEST; // 1 대만 가져 오기 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; public class mytest {deptdao dao; @public void initData ()가 ioexception {sqlsession session = mybatisutil.getSession (); dao = session.getmapper (deptdao.class); } / *** 지정된 레코드 쿼리* @throws ioexception* / @test public void ind System.out.println (Dept); }}테스트 결과 :
아래의 중단 점
상황 1 : mybatis-config.xml의 구성이 없습니다
상황 2 : mybatis-config.xml에서 구성
<settings> <!-지연된로드 스위치를 켜십시오-> <설정 이름 = "lazyloadingEnabled"value = "true" /> <!-필요에 따라로드하는 메시지 로딩으로 활성화로드를 변경합니다-> <setting name = "AttressivelazyLoading"value = "false" /> < /settings>
다음 단계 :
F6 다음 단계 :
F6 다음 단계 : 직원의 이름을 입력하십시오
상황 3 :
F6 다음 단계 :
F6 다음 : 직원의 이름을 인쇄하십시오
위는 편집자가 소개 한 Mybatis의 지연 로딩입니다. 나는 그것이 당신에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!