测试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"/>

时间: 2024-10-03 20:19:48

测试mybatis延迟加载错误与解决方法的相关文章

WCF项目中出现常见错误的解决方法:基础连接已经关闭: 连接被意外关闭

原文:WCF项目中出现常见错误的解决方法:基础连接已经关闭: 连接被意外关闭 在我们开发WCF项目的时候,常常会碰到一些莫名其妙的错误,有时候如果根据它的错误提示信息,一般很难定位到具体的问题所在,而由于WCF服务的特殊性,调试起来也不是那么方便,因此往往会花费不少时间来进行跟踪处理.本文介绍我在我在我的框架里面使用WCF服务的时候,出现的一个常见错误的处理方法,它的提示信息是:基础连接已经关闭: 连接被意外关闭.这种情况我碰到的有两种,一种是返回DataTable的时候出现的,一种是返回实体类

bash脚本中出现[[:not found错误的解决方法

bash脚本中出现[[:not found错误的解决方法--bash脚本总结1 今天在写脚本的时候,发生了一个奇怪的问题:在脚本中使用[[的时候报错“[[: not found”.遇到问题自然是解决问题. 1. 使用的bash版本太低? bash --version查看bash版本信息如下 [email protected]:~$bash --version GNU bash, version 3.2.39(1)-release (i486-pc-linux-gnu) Copyright (C)

SQLSERVER 备份还原常见错误以及解决方法

SQLSERVER 备份还原常见错误以及解决方法      个人在做测试的时候发现的常见问题,和一些解决方案,记录下来,以免遗忘! 错误一 解决方法: 先分离源数据库,然后你可以使用 move 属性 或者直接添加 REPLACE

编程中遇到的Python错误和解决方法汇总整理

这篇文章主要介绍了自己编程中遇到的Python错误和解决方法汇总整理,本文收集整理了较多的案例,需要的朋友可以参考下 开个贴,用于记录平时经常碰到的Python的错误同时对导致错误的原因进行分析,并持续更新,方便以后查询,学习.知识在于积累嘛!微笑+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++错误: 复制代码代码如下: >>> def f(x, y):      print x, y  >>> t

MongoDb的“not master and slaveok=false”错误及解决方法,读写分离

首先这是正常的,因为SECONDARY是不允许读写的, 在写多读少的应用中,使用Replica Sets来实现读写分离.通过在连接时指定或者在主库指定slaveOk,由Secondary来分担读的压力,Primary只承担写操作. 对于replica set 中的secondary 节点默认是不可读的, [[email protected] bin]$ mongo 127.0.0.1:33333 MongoDB shell version: 2.0.1 connecting to: 127.0.

yii webservice 提示:Procedure &#39;getSent&#39; not present 错误的解决方法

其实根据常用的webservice清除缓存方法,在client端加入这样一句话: ini_set("soap.wsdl_cache_enabled", "0"); 应该就可以了,但是处理了好久,在本地测试没问题,放到服务器上就不行,一直提示:Procedure 'getSent' not present 后来查看PHP的配置文件php.ini,找到这样一句话: soap.wsdl_cache_dir="/tmp" 然后进入对应目录,看到有这样子的

使用TarOutputStream出现 request to write &#39;1024&#39; bytes exceeds size in header错误的解决方法

因为测试流程中,所测客户端会根据服务器A返回的response决定发送给服务器B的请求里各参数的值,所以现在需要模拟服务器的响应.而这个项目服务器A的响应式返回一个流,一个GZIP压缩格式流,压缩的是多个文件,所以需要编写相应的groovy脚本.我这里使用了apache的ant包.不过在运行的时候出错了.错误提示如下 Caught: java.io.IOException: request to write '1024' bytes exceeds size in header of '2988

Request method &#39;POST&#39; not supported错误和解决方法

在使用SpringBoot的时候,在html页面用form表单post提交数据的时候报错: Request method 'POST' not supported 错误解析: 我是用的前端页面是HTML页面,而HTML文件,它并不支持响应头带有 post 的应答包,所以会报错. 而且在测试的时候进入到了Controller方法内,只是在进行页面跳转的时候,报错. 所以无法完成跳转操作. 解决方法: 若条件允许,使用 jsp 等能够接收 post 应答包的页面文件.使用jsp页面就可以完美解决问题

yii webservice 提示:Procedure &#39;getSent&#39; not present 错误的解决方法(转)

其实根据常用的webservice清除缓存方法,在client端加入这样一句话: ini_set("soap.wsdl_cache_enabled", "0"); 应该就可以了,但是处理了好久,在本地测试没问题,放到服务器上就不行,一直提示:Procedure 'getSent' not present 后来查看PHP的配置文件php.ini,找到这样一句话: soap.wsdl_cache_dir="/tmp" 然后进入对应目录,看到有这样子的