1. 지연 로딩이란 무엇입니까
resultMap은 고급 매핑을 구현할 수 있습니다(일대일 및 일대다 매핑을 달성하기 위해 연관 및 컬렉션 사용). 연관 및 컬렉션에는 지연 로딩 기능이 있습니다. .
요구사항:
주문을 조회하고 사용자 정보를 연결하는 경우. 주문 정보를 먼저 쿼리하면 요구 사항을 충족할 수 있습니다. 사용자 정보를 쿼리해야 할 경우 사용자 정보를 확인합니다. 요청 시 사용자 정보를 쿼리하는 것은 지연 로딩입니다.
지연 로드: 먼저 단일 테이블에서 쿼리한 다음 필요할 때 관련 테이블에서 관련 쿼리를 수행합니다. 이는 단일 테이블을 쿼리하는 것이 관련 방식으로 여러 테이블을 쿼리하는 것보다 빠르기 때문에 데이터베이스 성능을 크게 향상시킵니다.
연관별로 주문 쿼리 및 사용자 정보 쿼리
두 가지 매퍼 메소드에 해당하는 명령문을 정의해야 합니다.
(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 정의를 통해 지연 로딩 실행을 구성합니다.
연속 선택을 사용하여 지연 로딩으로 실행될 문의 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.javarreee2.5 Test2.5.1 테스트 아이디어 (1) Mapper 메서드(FindOrdersuserlazyloading)를 수행하고 findOrdersUserLazyLoading 내에서 Joanna.yan.mybatis.OrderscustomMapper를 호출하여 주문 정보만 쿼리합니다. 르 테이블). (2) 프로그램에서 이전 단계에서 쿼리한 List
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!