게으른 전략 원칙 : 쿼리 SQL이 사용하는 데이터가 실제로 데이터베이스에 발행 될 때만, 그렇지 않으면 발행되지 않습니다 (주로 여러 테이블의 공동 쿼리에 사용됨).
1. 일대일 게으른 하중 :
데이터베이스에 사람 테이블과 카드 테이블이 있다고 가정합니다. Person Table에는 필드 PID, PNAME, PAGE, PSEX, CID 및 카드 테이블에는 필드 CID, CNUM이 있습니다.
누군가의 이름과 ID 번호를 쿼리하고 싶다고 가정합니다.
원칙 : 이름을 쿼리 할 때 실제 버전은 ID 번호를 쿼리하지 않습니다. 현재 스테이션이 ID 번호를 사용하는 경우에만 카드에 쿼리를 발행합니다. ID 번호를 쿼리하는 전략입니다.
구현 예 :
구현 단계 :
1- 임박한 mybatis 종속성 JAR 패키지
2-add log4j 파일 (메모리에서 실제 실행 프로그램을 볼 수 있음)
1- 원칙 : 현재 스테이션이 ID 번호를 사용하는 경우에만 카드의 쿼리가 발행되며, 그렇지 않으면 개인 정보에 대한 쿼리 만 발행됩니다.
2-Open Lazy : conf.xml에서
<settings> <setting name = "lazyloadingEnabled"value = "true"/> <setting name = "agatressivelazyloading"value = "false"/> </settings>
3. 구현 :
(1) Mapper.xml 매핑 파일에서 :
<findcid "parametertype ="int "resulttype ="card "> select * select * select where cid =#{value} < /select> <resultmap type ="person "id ="p_c1 "> <id 열 ="pid "속성 ="pid " /> <result column ="pname "pname" "produce ="propertion = "property =" /< column = "psex"property = "psex"/> <Association Property = "card"javatype = "card"select = "findcid"column = "cid"> </accound> </resultmap> <select id = "selectpersonAndCardLazyByPid"ParameterType = "int"resultmap = "p_c1"> pid = {value} </select} </select}. 1- 선택 : 관련 쿼리 문을 지정하십시오
2 열 : 메인 문의 필드 값이 슬레이브 SQL 문의 매개 변수로 전달되는지 지정하십시오.
(2) 맵퍼 인터페이스에서 메소드를 정의하십시오.
공개 인원 selectpersonandcardlazybypid (int pid);
(3) Junit을 사용한 테스트 결과 :
1. 여기에 개인 정보 만 보내는 쿼리가 있습니다.
@test public void testelectpersonandcardlazybypid () {// 게으른 정책 일대일 사람 p = pm.selectpersonandcardlazybypid (1); //system.out.println(p); System.out.println (p.getpname ()+","); //system.out.println(p.getpname ()+","+p.getcard (). getCnum ()); }결과 실행 쿼리 문 :
2. 카드의 쿼리는 현재 스테이션이 ID 번호를 사용하는 경우에만 발행됩니다.
@test public void testelectpersonandcardlazybypid () {// 게으른 정책 일대일 사람 p = pm.selectpersonandcardlazybypid (1); //system.out.println(p); System.out.println (p.getpname ()+","); System.out.println (p.getpname ()+","+p.getcard (). getCnum ()); // 현재 스테이션이 ID 번호를 사용할 때 카드의 쿼리가 발행됩니다}.결과 실행 쿼리 문 :
2. 일대일 게으른 하중 :
구현 예 :
데이터베이스에 개인 테이블과 카드 신원 정보 테이블이 있다고 가정합니다. 가산기 주소 테이블 : 개인 테이블, PNAME, PAGE, PSEX, CID, CARD TABLE 및 FIELDS CNUM에 필드 PID가있는 경우; 가산기 테이블에는 필드 보조 장치, Ashi, PID가 있습니다
누군가의 이름과 주소와 ID 번호를 쿼리하고 싶다고 가정 해 봅시다 :
(1) Mapper.xml 매핑 파일 :
<!-Lazy 전략 일대일 = "select id ="fingcard_adder "parametertype ="int "resulttype ="adder "> select * from adder where pid =#{value} </select> <select id ="findcid1 "fin type = "person"id = "p_c1_a1"> <id column = "pid"property = "pid" /> <result column = "pname"property = "pname" /> <result column = "page"property = "page" /> <결과 열 = "psex"속성 = "psex" /> <anspication property = "card"javatype = "card" "card" "" "cid" <Collection Property = "Adder"Of -Type = "Adder"select = "Fingcard_adder"column = "pid"> </collection> </resultmap> <select id = "selectpersonAndCardAndAdderLazyBypid"parameterType = "int"resultMap = "p_c1_a1"> selephpid = {value} </selept}(2) 맵퍼 인터페이스 정의 방법 :
1. 여기에 개인 정보 만 보내는 쿼리가 있습니다.
@test public void testelectpersonandcarddadderlazybypid () {// 게으른 정책 일대일 사람 p = pm.selectpersonAndCardAdderLazyBypId (1); System.out.println (p.getpname ()+","); //// 여기에 개인 정보 만 보내는 쿼리}}결과 실행 쿼리 문 :
2. 여기에 개인 정보 및 신원 정보를 발급하는 쿼리가 있습니다.
@test public void testelectpersonandcarddadderlazybypid () {// 게으른 정책 일대일 사람 p = pm.selectpersonAndCardAdderLazyBypId (1); System.out.println (p.getpname ()+","); // 여기에 사람 정보 만 방출하는 쿼리가 있습니다. System.out.println (p.getpname ()+","+p.getcard (). getCnum ()); // 여기에 개인 정보 및 신원 정보를 방출하는 쿼리가 있습니다. }결과 실행 쿼리 문 :
3. 개인 정보, 신원 정보 및 주소 정보의 쿼리는 여기에서 발행됩니다.
@test public void testelectpersonandcarddadderlazybypid () {// 게으른 정책 일대일 사람 p = pm.selectpersonAndCardAdderLazyBypId (1); System.out.println (p.getpname ()+","); // 이것은 사람 정보 만 방출하는 쿼리입니다. System.out.println (p.getpname ()+","+p.getcard (). getCnum ()); // 이것은 개인 정보 및 신원 정보를 방출하는 쿼리입니다. //system.out.println(p.getpname ()+","+p.getcard (). getCnum ()); for (Adder Adder : p.getAdder ()) {//// 개인 정보 쿼리, 신원 정보 및 주소 정보는 여기에서 발행됩니다. System.out.println (adder.getashi ()); }} 결과 실행 쿼리 문 :
요약
위의 것은 Mybatis에서 게으른 전략을로드하는 지연 방법입니다. 나는 그것이 당신에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨주세요. 편집자는 제 시간에 당신에게 답장 할 것입니다!