测试mybatis延迟加载错误与解决方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了测试mybatis延迟加载错误与解决方法相关的知识,希望对你有一定的参考价值。

什么是延迟加载?

延迟加载又叫懒加载,也叫按需加载,也就是说先加载主信息,需要的时候,再去加载从信息。

需求:

    查询订单信息,需要时再去查询用户信息

实现方式:

    编写两个statement,其中一个statement是查询订单信息,一个是查询用户信息,但是查询订单信息的statement要使用resultMap标签进行结果映射。

Mapper接口:

  /**
    * 延迟加载  查询订单 需要时在查询用户信息
    * */
   public List<OrderExt> lazyLoading();

Mapper映射文件:OrderMapper.xml

   <resultMap type="orderExt" id="lazyLoading">
      <!-- 订单信息 -->
      <id column="id" property="id" />
      <result column="number" property="number" />
      <result column="user_id" property="user_id" />
      <!-- 用户信息 -->
      <association property="user"
       select="com.heima.mapper.UserMapper.findUserById" column="user_id"/>
     </resultMap>
     <!-- 延迟加载 -->
   <select id="lazyLoading" resultMap="lazyLoading">
      SELECT * from orders
   </select>

  <select id="findUserById" parameterType="int" resultType="com.heima.po.User">
     SELECT * FROM USER WHERE id = #{id}
   </select>

Mybatis全局映射文件:

    <!-- 延迟加载 懒加载 -->  

    <settings>
        <setting name="lazyLoadingEnabled" value="true" />
        <setting name="aggressiveLazyLoading" value="false" />
     </settings>

Test类:

    @Test
   public void lazyLoading(){
      SqlSession sqlSession = sqlSessionFactory.openSession();
      OrderMapper mapper = sqlSession.getMapper(OrderMapper.class);
      List<OrderExt> list = mapper.lazyLoading();
      for(OrderExt order : list){
       System.out.println(order);
      }
    }

在测试过程中出了一个错误:

  技术分享

 

解决方法:

  把OrderMapper映射文件中的 association标签中的column值写错了,下面是正确写法 ,column这个属性不能省略,否则将报错。

      <association property="user"
         select="com.heima.mapper.UserMapper.findUserById" column="user_id"/>

 

以上是关于测试mybatis延迟加载错误与解决方法的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis从入门到精通系列 11——Mybatis 延迟加载与立即加载

MyBatis测试resultMap,分步查询以及延迟加载

angularJS使用ocLazyLoad实现js延迟加载

Mybatis分解式查询

阶段3 1.Mybatis_11.Mybatis的缓存_4 mybatis一对多实现延迟加载

Mybatis框架--测试延迟加载