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

     

     

  • 相关阅读:
    数论-剩余类、完全剩余系、缩系、欧拉函数
    数论-同余式
    计算机科研项目中的重点项目、重大项目、重大研究计划项目,重点研发计划有什么区别和联系?
    VFS虚拟文件系统
    git中文名转义带来的麻烦;git配置之core.quotepath;git中文乱码
    nodejs 与 npm 配置
    mongodb 部署 安装 使用 记录
    GPG error: https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.4 Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 656408E390CFB1F5
    slurm 网路监控软件使用
    Win10 64位,北航研究生教务系统文件打印办法(旧版GSMIS),只要三步就能解决;
  • 原文地址:https://www.cnblogs.com/Java60-123456/p/10678499.html
Copyright © 2011-2022 走看看