>  기사  >  Java  >  mybatis 지연 로딩 솔루션 소개

mybatis 지연 로딩 솔루션 소개

Y2J
Y2J원래의
2017-05-13 10:36:031478검색

이 글은 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 버전 다운로드

2. Java 무료 동영상 튜토리얼

3. Java 주석 종합 분석

위 내용은 mybatis 지연 로딩 솔루션 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.