码迷,mamicode.com
首页 > 其他好文 > 详细

mybatis 的延时加载

时间:2019-04-09 18:26:24      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:head   cell   except   com   loader   查询   resultmap   config   soc   

加载方式四种
  第一种:直接加载 部门+员工(直接就绑定到部门emps属性上) 

  mybatis(3.4.1之后版本默认lazyLoadingEnabled为false,之前为true,哪怕之前为true,能 起到延迟加载的作用 是两码事)

实体:public class Emp{

/****/

private Integer empno;

/****/

private String empName;

/****/

private Integer deptno;

private Dept dept;

 

mapper.xml:

<resultMap id="fenEmpmappper" type="Emp">

<id column="empno" property="empno"></id>

<result column="empName" property="empName"></result>

<association property="dept" javaType="Dept" select="getmapper" column="deptno"/>

</resultMap>

 

<select id="fenmanytoone" resultMap="fenEmpmappper">

select * from emp where empno=#{empno}

</select>

mybetis-config.xml配置:

<setting name="lazyLoadingEnabled" value="false"></setting>

测试: public void fenmanytoone() throws Exception {

SqlSession session= UtilMybatis.getsession();

EmpDAO dao= session.getMapper(EmpDAO.class);

Emp emp = dao.fenmanytoone(1);

}

结果:执行两条sql语句

技术图片

 

技术图片

  第二种:延迟加载,在不调用任何对象的情况下,只加载主对象的属性

实体同第一种

测试: public void fenmanytoone() throws Exception {

SqlSession session= UtilMybatis.getsession();

EmpDAO dao= session.getMapper(EmpDAO.class);

Emp emp = dao.fenmanytoone(1);

}

 

mybetis-config.xml配置:

<setting name="lazyLoadingEnabled" value="true"></setting>

结果:执行一条sql语句

技术图片

 

技术图片

技术图片

  第三种:侵入式延迟加载,关联对象是侵入到了主对象的属性中。当我们通过主对象名。属性名,访问

  主对象属性的时候,加载关联对象(方式SQL语句) lazyLoadingEnabled=true  agreesiveLazyLoading=true

mybetis-config.xml 配置:

<setting name="lazyLoadingEnabled" value="true"></setting>

<setting name="aggressiveLazyLoading" value="true"></setting>

测试:

public void fenmanytoone() throws Exception {

SqlSession session= UtilMybatis.getsession();

EmpDAO dao= session.getMapper(EmpDAO.class);

Emp emp = dao.fenmanytoone(1);

System.out.println(emp.getEmpName());

}

结果:注解:只要用到主对象(emp.getEmpName()),关联对象也进行加载

技术图片

 

技术图片

 

  第四种 :深度延迟, 关联对象和 主对象属性没有关系,哪怕访问主对象的属性,也不会发送查询

  关联对象数据的SQL   lazyLoadingEnabled=true  agreesiveLazyLoading=false

mybetis-config.xml 配置:

<setting name="lazyLoadingEnabled" value="true"></setting>

<setting name="aggressiveLazyLoading" value="false"></setting>

测试:

public void fenmanytoone() throws Exception {

SqlSession session= UtilMybatis.getsession();

EmpDAO dao= session.getMapper(EmpDAO.class);

Emp emp = dao.fenmanytoone(1);

System.out.println(emp.getEmpName());

}

结果:注解:访问主对象,不进行关联对象的加载,什么时候用到关联对象,什么时候加载

技术图片

 

技术图片

.配置延迟加载

mybatis默认没有开启延迟加载,需要在SqlMapConfig.xml中setting配置。

在mybatis核心配置文件中配置:

lazyLoadingEnabled、aggressiveLazyLoading

 

mybetis-config.xml中配置:

设置项

描述

允许值

默认值

lazyLoadingEnabled

全局性设置懒加载。如果设为‘false’,则所有相关联的都会被初始化加载。

true | false

false

aggressiveLazyLoading

当设置为‘true’的时候,懒加载的对象可能被任何懒属性全部加载。否则,每个属性都按需加载。

true | false

true

 

 

技术图片

mybatis 的延时加载

标签:head   cell   except   com   loader   查询   resultmap   config   soc   

原文地址:https://www.cnblogs.com/Java60-123456/p/10678499.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!