이 글은 mybatis 튜토리얼에서 지연 로딩에 대한 자세한 설명을 주로 소개합니다. 게으른 로딩의 의미와 사용법 구현에 대해 자세히 소개되어 있습니다. 관심 있는 분들은
지연 로딩
1에 대해 알아볼 수 있습니다.
데이터쿼리를 수행할 때 데이터베이스 쿼리 성능을 향상하려면 단일 테이블 쿼리를 사용하는 것이 좋습니다. 단일 테이블 쿼리는 다중 테이블 쿼리보다 빠르기 때문입니다. 관련 검색어입니다.
단일 테이블을 쿼리하는 것이 요구사항을 충족할 경우, 관련 정보가 필요할 때 먼저 쿼리하고, 관련 정보가 필요할 때 다시 쿼리하는 것을 지연 로딩이라고 합니다.
mybatis의 ResultMap은 지연 로딩 기능을 제공하며, 지연 로딩은 resultMap을 통해 구성됩니다.
2 지연 로딩을 지원하도록 mybatis 구성
SqlMapConfig.xml에서 전역 매개변수 구성:
<!-- 全局配置参数 --> <settings> <!-- 延迟加载总开关 --> <setting name="lazyLoadingEnabled" value="true" /> <!-- 设置按需加载 --> <setting name="aggressiveLazyLoading" value="false" /> </settings>
3 지연 로딩 구현
3.1 구현 아이디어
요구사항 :
주문 및 사용자 정보 조회, 1:1 조회가 가능합니다.
처음에는 주문 정보만 조회
사용자가 필요할 때 Orders 클래스의 getUser() 메소드를 호출하여 Lazy Loading을 수행하고 SQL을 발행 데이터베이스에.
3.2 mapper.xml
<!-- 一对一查询延迟加载 开始只查询订单,对用户信息进行延迟加载 --> <select id="findOrderUserListLazyLoading" resultMap="orderCustomLazyLoading"> SELECT orders.* FROM orders </select>
3.3 resultMap
<!-- 一对一查询延迟加载 的配置 --> <resultMap type="orders" id="orderCustomLazyLoading"> <!-- 完成了订单信息的映射配置 --> <!-- id:订单关联用户查询的唯 一 标识 --> <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" /> <!-- 配置用户信息的延迟加载 select:延迟加载执行的sql所在的statement的id,如果不在同一个namespace需要加namespace sql:根据用户id查询用户信息 column:关联查询的列 property:将关联查询的用户信息设置到Orders的哪个属性 --> <association property="user" select="com.sihai.mybatis.mapper.UserMapper.findUserById" column="user_id"></association> </resultMap>
3.4 mapper.java
//一对一查询,延迟加载 public List<Orders> findOrderUserListLazyLoading() throws Exception;
3.5 테스트 코드
// 一对一查询延迟加载 @Test public void testFindOrderUserListLazyLoading() throws Exception { SqlSession sqlSession = sqlSessionFactory.openSession(); // 创建mapper代理对象 OrdersMapperCustom ordersMapperCustom = sqlSession .getMapper(OrdersMapperCustom.class); // 调用方法 List<Orders> list = ordersMapperCustom.findOrderUserListLazyLoading(); //这里执行延迟加载,要发出sql User user = list.get(0).getUser(); System.out.println(user); }
4 resultType, resultMap, 지연 로딩 사용 시나리오 요약
4.1 지연 로딩:
지연 로딩을 구현하는 방법에는 여러 가지가 있습니다. 단일 테이블만 쿼리하면 데이터베이스 쿼리 성능을 향상시키기 위해 지연 로딩을 사용한 후 관련 정보를 쿼리합니다.
mybatis는 서비스 레이어에 지연 로딩 기능을 제공합니다.
4.2 resultType:
기능: SQL 열 이름 pojo 속성 이름의 일관성에 따라 쿼리 결과를 pojo에 매핑합니다.
경우: 일부 세부 레코드를 표시하는 것이 일반적입니다. 모든 관련 쿼리 정보가 페이지에 표시되면 resultType을 직접 사용하여 각 레코드를 pojo에 매핑하고 목록을 탐색할 수 있습니다. 프런트엔드 페이지(목록(가운데는 pojo)).
4.3 resultMap:
연관 및 컬렉션을 사용하여 일대일 및 일대다 고급 매핑을 완성합니다.
4.4 연관:
기능: 연관 쿼리 정보를 pojo 클래스에 매핑합니다.
경우: 관련 정보를 편리하게 얻기 위해 연관을 사용하여 주문 및 관련 사용자 정보를 조회하는 등 관련 주문을 POJO에 매핑할 수 있습니다.
4.5 컬렉션:
기능: 관련 쿼리 정보를 목록 컬렉션에 매핑합니다.
경우: 관련 정보를 편리하게 얻으려면 컬렉션을 사용하여 관련 정보를 목록 컬렉션에 매핑할 수 있습니다. 예: 사용자 권한 범위 모듈 및 기능을 쿼리하려면 컬렉션을 사용하면 됩니다. 모듈 및 함수 목록을 목록에 매핑합니다.
【관련 추천】
1. 특별 추천: "php Programmer Toolbox" V0.1 버전 다운로드
위 내용은 mybatis 지연 로딩 솔루션 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!