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>
Description | 허용 값 |
기본값 |
|
전역적으로 지연 로딩을 설정합니다. 'false'로 설정하면 연관된 모든 항목이 처음에 로드됩니다. |
true | false | false | |
'true'로 설정하면 지연 로드된 객체가 게으른 속성과 함께 완전히 로드될 수 있습니다. 그렇지 않으면 요청 시 각 속성이 로드됩니다. | true | false | true |
//查询订单关联查询用户,用户信息时延迟加载public List<Orders> findOrdersUserLazyLoading() throws Exception;
<!-- 全局配置参数,需要时再设置 --> <settings> <!-- 打开延迟加载的开关 --> <setting name="lazyLoadingEnabled" value="true"/> <!-- 将积极加载改为消极加载即按需要加载 --> <setting name="aggressiveLazyLoading" value="false"/> </settings>
위 내용은 MyBatis 지연 로딩 예제에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!