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;

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

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

时间: 2024-10-23 10:10:00

mybatis 的延时加载的相关文章

Mybatis 中延时加载

1 为了处理N+1 问题,Mybatis 引入了延时加载功能,意义是一开始并不取出关联数据,只有当使用时,才发送sql语句去取. mybatis中两个全局设置 lazyLoadingEnabled 和 aggressiveLazyLoading 是否开启延迟加载功能. mybatis 中的默认情况下是及时加载的,一旦关联比较多,会造成性能问题. 1.1)如果设置 lazyLoadingEnabled  = true,默认情况下mybatis 是按层级延时加载的. 1.2)如果在设置了1.1 后,

MyBatis入门(五)---延时加载、缓存

一.创建数据库 1.1.建立数据库 /* SQLyog Enterprise v12.09 (64 bit) MySQL - 5.7.9-log : Database - mybatis ********************************************************************* */ /*!40101 SET NAMES utf8 */; /*!40101 SET SQL_MODE=''*/; /*!40014 SET @[email protec

mybatis_12延时加载_懒加载

延时加载:也叫懒加载 2.1 延迟加载 延迟加载又叫懒加载,也叫按需加载.也就是说先加载主信息,在需要的时候,再去加载从信息. 在mybatis中,resultMap标签 的association标签和collection标签具有延迟加载的功能. 默认是即时加载,在配置完上面的一系列信息之后,只要打开总开关就是懒加载 总开关: 2.2 案例: Mapper.java     Mapper.xml UserMappler.xml   OrdersMapper.xml   测试 配置懒加载   原文

图片延时加载技术

同步延时加载页面延迟加载,即分屏显示,用户滚动页面,切换页面时显示当前屏幕的图片 原理:将img的地址暂时存在一个属性中,如data-original,而让src为空,等到鼠标滚动的时候,响应一个事件($(this).trigger('appear');),此时会把data-original中的地址取出来,放入src 1:引入jquery.lazyload.js,该js最好放在页面的最下面 2:给img添加延迟属性 如: <img class="lazy" src="/

IOS开发中如何解决TableView中图片延时加载

经常我们会用tableView显示很多条目, 有时候需要显示图片, 但是一次从服务器上取来所有图片对用户来浪费流量, 对服务器也是负担.最好是按需加载,即当该用户要浏览该条目时再去加载它的图片. - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { UIImage *image = [self g

Android处理延时加载的方法

在项目开发中,经常需要通过延时加载来实现满足我们的项目要求.那到底怎样来实现延时,下面结合java与android的相关方法来实现延时问题. 一.利用线程的Sleep方法 <span style="font-family:Microsoft YaHei;font-size:18px;"><span style="white-space:pre"> </span>new Thread(new Runnable(){ @Overrid

Rhythmk 学习 Hibernate 03 - Hibernate 之 延时加载 以及 ID 生成策略

Hibernate 加载数据 有get,跟Load 1.懒加载: 使用session.load(type,id)获取对象,并不读取数据库,只有在使用返回对象值才正真去查询数据库. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 @Test    public void  test1()    {        Session session = null;         try {             session = Hiber

jquery实现的图片延时加载插件

jquery实现的图片延时加载插件: 在很多网站尤其是图片站,都采用了图片延时加载效果,这样可以有效的减轻服务器的压力,有点自然不言而喻了,下面就和大家分享一个图片延时加载的插件,希望能够给大家带来一定的帮助. 代码如下: <script type="text/javascript"> (function( $ ){ $.fn.imglazyload=function( options ) { var o=$.extend({ attr:'lazy-src', contai

延时加载js代码提高速度

延时加载js代码提高速度:如果网页中存在大量的javascript代码会极大的影响网页的访问速度,下面就简单介绍一下如何处理此问题.一.延时加载js文件:可以使用定时器函数setTimeout()让外部的js文件延迟加载,例如: <script type="text/javascript" src="" id="my"></script> <script type="text/javascript"