关于 Mybatis 设置懒加载无效的问题

看了 mybatis 的教程,讲到关于mybatis 的懒加载的设置:

只需要在 mybatis 的配置文件中设置两个属性就可以了:

    <settings>
        <!-- 打开延迟加载的开关 -->
        <setting name="lazyLoadingEnabled" value="true" />
        <!-- 将积极加载改为消息加载即按需加载 -->
        <setting name="aggressiveLazyLoading" value="false" />

    </settings>

但是经过测试之后发现是无效的,经过一番折腾,发现是因为我在测试的时候,调用了查询出来的对象的 toString 方法,所以触发了一次懒加载:

            EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
            Employee employee = mapper.selectEmployee(1);
            System.out.println(employee);

后来在配置文件中加入了这个设置:

<setting name="lazyLoadTriggerMethods" value=""/>

再试一遍,问题解决了

附上文档上的说明:

lazyLoadTriggerMethods:指定哪个对象的方法触发一次延迟加载。默认值:equals,clone,hashCode,toString

所以,当我打印对象时,由于触发了 toString 方法,所以触发了一次懒加载

Ps:在 Employee 中关联了 Department 对象,但是为了测试懒加载,我在 Employee 的toString 方法中并没有调用 Department 这个属性

时间: 2024-11-06 10:39:35

关于 Mybatis 设置懒加载无效的问题的相关文章

hibernate 设置懒加载自动为字段添加属性

hibernate错误:org.apache.struts2.json.JSONWriter can not access a member of class org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper with modifiers "public" 解释是当action执行完,return success返回xml文件后,前提是你设置了懒加载之后,hibernate自动为你懒加载的实

12、mybatis懒加载的设置

MyBatis的Lazy Loading可以实现延迟查询Bean里的嵌套成员类,控制lazy loading的<settings>属性有 lazyLoadingEnabled: lazy loading开关 aggressiveLazyLoading: 侵略性 lazy loading 开关 设置项 描述 允许值 默认值 lazyLoadingEnabled 全局性设置懒加载.如果设为‘false’,则所有相关联的都会被初始化加载. true | false 3.4.1后为false aggr

mybatis中的懒加载

知识点:mybatis中的懒加载的使用 参考:https://www.cnblogs.com/ysocean/p/7336945.html?utm_source=debugrun&utm_medium=referral (1)什么是mybatis的懒加载 通俗的讲就是按需加载,我们需要什么的时候再去进行什么操作.而且先从单表查询,需要时再从关联表去关联查询,能大大提高数据库性能, 因为查询单表要比关联查询多张表速度要快. 在mybatis中,resultMap可以实现高级映射(使用associa

mybatis懒加载特性详解,以及多对多映射详解

注意讲解都在代码中 准备数据库,测试数据,各位自己添加,因为是多对多,所以使用中间表: 用到的实体: 学生类: public class Student { private Integer sid; private String name; private Integer age; //一个学生有多个老师,一个老师有多个学生 private List<Teacher> teachers=new ArrayList<Teacher>(); setter.. getter.... to

Mybatis懒加载

一.需求:查询用户信息,有时候需要关联查出部门信息. 第一种方法:我们直接关联查询出所有用户和部门的信息 select * from tb_user u ,tb_department d where u.dep_id = d.dep_id; 分析: ①这里我们一次查询出所有用户信息,需要什么部门信息的时候直接从查询的结果中筛选.但是如果部门和用户表都比较大的时候,这种关联查询肯定比较耗时. ②我们的需求是有时候需要关联查询部门信息.这里不是一定需要部门信息的.即有时候不需要查询部门信息,我们也查

【java】itoo项目实战之hibernate 懒加载优化性能

在做itoo 3.0 的时候,考评系统想要上线,就开始导入数据了,只导入学生2万条数据,但是导入的速度特别的慢,这个慢的原因是因为导入的时候进行了过多的IO操作.但是导入成功之后,查询学生的速度更加慢,因为底层用了hibernate的hql语句进行查询的,学习过hibernate的人都知道,如果hibernate不设置懒加载的话,只有是有关联的数据都会一次性全部都查询出来,我试了试,查询2万条数据,最深的级联查询是有5层,然后发出来的语句是460条,时间大概是10s.然后就考虑使用lazy进行优

八、懒加载

1.需求:查询订单信息,有时候需要关联查出用户信息. 第一种方法:我们直接关联查询出所有订单和用户的信息 1 select * from orders o ,user u where o.user_id = u.id; 分析: ①.这里我们一次查询出所有的信息,需要什么信息的时候直接从查询的结果中筛选.但是如果订单和用户表都比较大的时候,这种关联查询肯定比较耗时. ②.我们的需求是有时候需要关联查询用户信息,这里不是一定需要用户信息的.即有时候不需要查询用户信息,我们也查了,程序进行了多余的耗时

mybatis 的延时加载

加载方式四种 第一种:直接加载 部门+员工(直接就绑定到部门emps属性上) mybatis(3.4.1之后版本默认lazyLoadingEnabled为false,之前为true,哪怕之前为true,能 起到延迟加载的作用 是两码事) 实体:public class Emp{ /****/ private Integer empno; /****/ private String empName; /****/ private Integer deptno; private Dept dept;

【转】实现ViewPager懒加载的三种方法

方法一 在Fragment可见时请求数据.此方案仍预加载了前后的页面,但是没有请求数据,只有进入到当前Framgent时才请求数据. 优点:实现了数据的懒加载缺点:一次仍是三个Framgment对象,不是完全意义的懒加载 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 public class FragmentSample extends Fragment{ ....... @Override public void setUserVi