Home  >  Article  >  Java  >  Introducing the solution for mybatis lazy loading

Introducing the solution for mybatis lazy loading

Y2J
Y2JOriginal
2017-05-13 10:36:031502browse

This article mainly introduces the detailed explanation of delayed loading in the mybatis tutorial. The meaning and usage implementation of lazy loading are introduced in detail. Those who are interested can learn about

lazy loading

1 The meaning of using lazy loading

When performing data query, in order to improve database query performance, try to use single table query, because single table query is faster than multi-table related query.

If querying a single table can meet the needs, query the single table at the beginning. When related information is needed, then related query. When related information is needed, query again. This is called delayed loading.

The resultMap in mybatis provides the delayed loading function, and the delayed loading is configured through the resultMap.

2 Configure mybatis to support delayed loading

##Configure global parameters in SqlMapConfig.xml:



<!-- 全局配置参数 --> 
 
<settings> 
 
<!-- 延迟加载总开关 --> 
 
<setting name="lazyLoadingEnabled" value="true" /> 
 
<!-- 设置按需加载 --> 
 
<setting name="aggressiveLazyLoading" value="false" /> 
 
</settings>

3 Lazy loading implementation

3.1 Implementation ideas

Requirements:


Query order and user information, one-to-one query.


Only query order information at the beginning


When a user is needed, call the getUser() method in the Orders class to perform lazy loading and issue SQL to the database.


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 code

// 一对一查询延迟加载 
  @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 summary of resultType, resultMap, lazy loading usage scenarios

##4.1 Lazy loading:

There are many ways to implement delayed loading. Querying only a single table can meet the needs. In order to improve database query performance, lazy loading is used and then the related information is queried. Mybatis provides lazy loading function for service layer.


4.2 resultType:

Function: Map the query results to the pojo according to the consistency of the sql column name pojo attribute name.

Occasion: It is common to display some detailed records. When all related query information is displayed on the page, you can directly use resultType to map each record to the pojo, and traverse the list on the front-end page (list (in the middle is pojo).


4.3 resultMap:

Use association and collection to complete one-to-one and one-to-many advanced mapping.

4.4 association:

Function: Map association query information to a pojo class.

Occasion: In order to conveniently obtain related information, you can use association to map related orders to POJO, such as querying orders and related user information.


4.5 collection:

Function: Map related query information to a list collection.

Occasion: In order to conveniently obtain related information, you can use collection to map the related information to the list collection. For example: to query user permission scope modules and functions, you can use collection to map the module and function lists to the list. .


【Related Recommendations】


1.

Special Recommendation

:"php Programmer Toolbox" V0.1 version Download2. Java free video tutorial

3. Comprehensive analysis of Java annotations

The above is the detailed content of Introducing the solution for mybatis lazy loading. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn