zoukankan      html  css  js  c++  java
  • 测试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"/>

  • 相关阅读:
    第二周总结
    币值转换
    抓老鼠
    秋季学习总结
    第七周作业
    第六周作业
    2019年春季第五周
    2019年春季学期第四周作业
    2019年春季学期第三周作业
    2019年春季学期第二周作业
  • 原文地址:https://www.cnblogs.com/muli/p/5154215.html
Copyright © 2011-2022 走看看