> Java > java지도 시간 > 본문

MyBatis 지연 로딩 예제에 대한 자세한 설명

零下一度
풀어 주다: 2017-06-25 10:38:13
원래의
1308명이 탐색했습니다.

1. 지연 로딩이란 무엇입니까

resultMap은 고급 매핑을 구현할 수 있습니다(일대일 및 일대다 매핑을 달성하기 위해 연관 및 컬렉션 사용). 연관 및 컬렉션에는 지연 로딩 기능이 있습니다. .

요구사항:

주문을 조회하고 사용자 정보를 연결하는 경우. 주문 정보를 먼저 쿼리하면 요구 사항을 충족할 수 있습니다. 사용자 정보를 쿼리해야 할 경우 사용자 정보를 확인합니다. 요청 시 사용자 정보를 쿼리하는 것은 지연 로딩입니다.

지연 로드: 먼저 단일 테이블에서 쿼리한 다음 필요할 때 관련 테이블에서 관련 쿼리를 수행합니다. 이는 단일 테이블을 쿼리하는 것이 관련 방식으로 여러 테이블을 쿼리하는 것보다 빠르기 때문에 데이터베이스 성능을 크게 향상시킵니다.

2. 연관을 사용하여 지연 로딩 구현

2.1 요구 사항

연관별로 주문 쿼리 및 사용자 정보 쿼리

2.2mapper.xml

두 가지 매퍼 메소드에 해당하는 명령문을 정의해야 합니다.

(1) 주문 정보만 쿼리

SELECT * FROM 주문

주문을 쿼리하는 문에서다음 문(사용자 정보 연결)의 로드(실행)를 지연하려면 연결을 사용하세요.

    <!-- 查询订单关联查询用户  --><select id="findOrdersUserLazyLoading" resultMap="OrdersUserLazyLoadingResultMap">SELECT * FROM orders</select>
로그인 후 복사

(2) 연관별 사용자 정보 조회

위에서 조회한 주문 정보에서 user_id를 사용하여 사용자 정보 조회

UserMapper.xml에서 findUserById를 사용

    <select id="findUserById" parameterType="int" resultType="user">select * from user where id=#{value}</select>
로그인 후 복사

필요할 때 먼저 findOrdersUserLazyLoading을 실행합니다. 사용자에게 쿼리하고, fingUserById를 실행하고, resultMap 정의를 통해 지연 로딩 실행을 구성합니다.

2.3 resultMap의 지연 로딩

연속 선택을 사용하여 지연 로딩으로 실행될 문의 ID를 지정합니다.

    <!-- 延迟加载的resultMap  --><resultMap type="joanna.yan.mybatis.entity.Orders" id="OrdersUserLazyLoadingResultMap"><!-- 1.对订单信息进行映射配置 --><id column="id" property="id"/><result column="user_id" property="userId"/><result column="number" property="number"/><result column="createtime" property="createtime"/><result column="note" property="note"/><!-- 2.实现对用户信息进行延迟加载 --><!-- select:指定延迟加载需要执行的statement的id(是根据user_id查询用户信息的statement) 
               要使用UserMapper.xml中findUserById完成根据用户id(user_id)用户信息的查询,
               如果findUserById不在本mapper中需要前边加namespace。
             column:订单信息中关联用户信息查询的列,是user_id
              关联查询的sql理解为:
             SELECT orders.*,
                (SELECT username FROM USER WHERE orders.user_id = user.id)username,
                (SELECT sex FROM USER WHERE orders.user_id = user.id)sex
             FROM orders--><association property="user" javaType="joanna.yan.mybatis.entity.User"select="joanna.yan.mybatis.mapper.UserMapper.findUserById" column="user_id"></association></resultMap>
로그인 후 복사
E42.4Mapper.java
rreee

2.5 Test
2.5.1 테스트 아이디어

(1) Mapper 메서드(FindOrdersuserlazyloading)를 수행하고 findOrdersUserLazyLoading 내에서 Joanna.yan.mybatis.OrderscustomMapper를 호출하여 주문 정보만 쿼리합니다. 르 테이블).

(2) 프로그램에서 이전 단계에서 쿼리한 List를 순회합니다. Orders에서 getUser()를 호출하면 지연 로딩이 시작됩니다.

(3) 로딩을 지연하고 UserMapper.xml의 findUserById 메서드를 호출하여 사용자 정보를 얻습니다.

2.5.2 지연 로딩 구성

mybatis는 기본적으로 지연 로딩을 활성화하지 않으며 SqlMapConfig.xml에서 구성해야 합니다.

mybatis 코어 구성 파일에 구성됨:

lazyLoadingEnabled, 적극적인LazyLoading

항목 설정lazyLoadingEnabledaggressiveLazyLoadingSqlMapConfig.xml에 구성됨:

Description

허용 값

기본값

전역적으로 지연 로딩을 설정합니다. 'false'로 설정하면 연관된 모든 항목이 처음에 로드됩니다.

true | false

false

'true'로 설정하면 지연 로드된 객체가 게으른 속성과 함께 완전히 로드될 수 있습니다. 그렇지 않으면 요청 시 각 속성이 로드됩니다.

true | false

true

    //查询订单关联查询用户,用户信息时延迟加载public List<Orders> findOrdersUserLazyLoading() throws Exception;
로그인 후 복사

2.5.3 테스트 코드
     <!-- 全局配置参数,需要时再设置  --> <settings> <!-- 打开延迟加载的开关  --> <setting name="lazyLoadingEnabled" value="true"/> <!-- 将积极加载改为消极加载即按需要加载 --> <setting name="aggressiveLazyLoading" value="false"/> </settings>
로그인 후 복사

2. 게으른 로딩에 대한 6가지 생각
제공되지 않음 by mybatis 연관 및 컬렉션에서 지연 로딩을 구현하는 방법은 무엇입니까?

구현 방법은 다음과 같습니다.

두 개의 매퍼 메소드 정의:

(1) 주문 목록 조회

(2) 사용자 ID를 기반으로 사용자 정보 조회

구현 아이디어: 먼저 획득할 첫 번째 매퍼 메소드를 조회합니다. 주문 정보 목록

테스트 프로그램에서는 필요에 따라 두 번째 매퍼 메소드를 호출하여 사용자 정보를 쿼리합니다.

즉, 지연 로딩 방법을 사용하면 먼저 간단한 SQL(단일 테이블이 바람직하지만 관련 쿼리도 가능)을 쿼리한 다음 필요에 따라 관련 쿼리에 대한 기타 정보를 로드합니다.

위 내용은 MyBatis 지연 로딩 예제에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!