精华内容
下载资源
问答
  • mybatis延迟加载

    2017-12-29 15:00:23
    mybatis延迟加载

    什么是延迟加载

    • resultMap可实现高级映射(使用association、collection实现一对一及一对多映射),association、collection具备延迟加载功能。
    • 延迟加载:先从单表查询,需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速度要快
    • 如果查询订单并且关联查询用户信息。如果先查询订单信息即可满足要求,当我们需要查询用户信息时再查询用户信息。把对用户信息的按需去查询就是延迟加载。

    使用association实现延迟加载

    • 先查询订单信息这里写图片描述这里写图片描述
      • column属性指定要将查询的结果的哪个字段的值,作为参数传递给下一表查询
    • 根据上面查询的结果查询用户信息这里写图片描述
    • 打开延迟加载开关这里写图片描述
      • lazyLoadingEnabled:设置懒加载,默认为false。如果为false:则所有相关联的都会被初始化加载。
      • aggressiveLazyLoading:默认为true。当设置为true时,懒加载的对象可能被任何懒属性全部加载;否则,每个属性按需加载。
    • 使用collection实现延迟加载,同理
    展开全文
  • mybatis 延迟加载

    2021-03-18 09:55:03
    mybatis 延迟加载 相关定义 1.什么是延迟加载 在真正使用数据时才发起查询,不用的时候不查询。按需加载(懒加载) 2.什么是立即加载 不管用不用,只要一调用方法,马上发起查询。 配置 在mybatis 配置页面中 加入 ...

    mybatis 延迟加载

    相关定义

    1.什么是延迟加载
    在真正使用数据时才发起查询,不用的时候不查询。按需加载(懒加载)
    2.什么是立即加载
    不管用不用,只要一调用方法,马上发起查询。

    配置

    在mybatis 配置页面中 加入

     <!--配置参数 -->
        <settings>
            <!--开启Mybatis支持延迟加载-->
            <setting name="lazyLoadingEnabled" value="true"/>
            <!--触发方法立即加载,否则延迟加载-->
            <setting name="aggressiveLazyLoading" value="false"/>
        </settings>
    

    查询出账户信息及其对应的用户信息
    IAccountDao.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     <mapper namespace="com.itheima.dao.IAccountDao">
        <resultMap id="accountUserMap" type="account">
            <id column="id" property="id"></id>
            <result column="uid" property="uid"></result>
            <result column="money" property="money"></result>
            <!--select 属性指定的内容:查询用户的唯一标识;
                column属性指定的内容:用户根据id查询时,所需要的参数的值-->
            <association property="user" column="uid" select="com.itheima.dao.IUserDao.findById"></association>
        </resultMap>
    
        <select id="findAll" resultMap="accountUserMap">
            select * from account
        </select>
    </mapper>
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     <mapper namespace="com.itheima.dao.IUserDao">
    
        <select id="findAll" resultType="UsER">
            select * from user
        </select>
        <select id="findById" parameterType="int" resultType="User" >
            select * from user where id = #{uid}
        </select>
    </mapper>
    

    当开启延迟加载的时候 当不使用用户数据时 会不查询 输出结果

        main] DEBUG ansaction.jdbc.JdbcTransaction  - Opening JDBC Connection
    2021-03-18 10:01:30,035 598    [           main] DEBUG source.pooled.PooledDataSource  - Created connection 1615056168.
    2021-03-18 10:01:30,035 598    [           main] DEBUG ansaction.jdbc.JdbcTransaction  - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@6043cd28]
    2021-03-18 10:01:30,037 600    [           main] DEBUG theima.dao.IAccountDao.findAll  - ==>  Preparing: select * from account 
    2021-03-18 10:01:30,068 631    [           main] DEBUG theima.dao.IAccountDao.findAll  - ==> Parameters: 
    2021-03-18 10:01:30,242 805    [           main] DEBUG theima.dao.IAccountDao.findAll  - <==      Total: 3
    

    当没有开启延迟加载的时候 会立即加载出来 输出结果

    main] DEBUG ansaction.jdbc.JdbcTransaction  - Opening JDBC Connection
    2021-03-18 10:04:54,286 656    [           main] DEBUG source.pooled.PooledDataSource  - Created connection 352359770.
    2021-03-18 10:04:54,287 657    [           main] DEBUG ansaction.jdbc.JdbcTransaction  - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@1500955a]
    2021-03-18 10:04:54,289 659    [           main] DEBUG theima.dao.IAccountDao.findAll  - ==>  Preparing: select * from account 
    2021-03-18 10:04:54,317 687    [           main] DEBUG theima.dao.IAccountDao.findAll  - ==> Parameters: 
    2021-03-18 10:04:54,342 712    [           main] DEBUG .itheima.dao.IUserDao.findById  - ====>  Preparing: select * from user where id = ? 
    2021-03-18 10:04:54,343 713    [           main] DEBUG .itheima.dao.IUserDao.findById  - ====> Parameters: 46(Integer)
    2021-03-18 10:04:54,350 720    [           main] DEBUG .itheima.dao.IUserDao.findById  - <====      Total: 1
    2021-03-18 10:04:54,351 721    [           main] DEBUG .itheima.dao.IUserDao.findById  - ====>  Preparing: select * from user where id = ? 
    2021-03-18 10:04:54,351 721    [           main] DEBUG .itheima.dao.IUserDao.findById  - ====> Parameters: 45(Integer)
    2021-03-18 10:04:54,360 730    [           main] DEBUG .itheima.dao.IUserDao.findById  - <====      Total: 1
    2021-03-18 10:04:54,361 731    [           main] DEBUG theima.dao.IAccountDao.findAll  - <==      Total: 3
    
    展开全文
  • Mybatis延迟加载

    2020-10-24 15:52:09
    Mybatis延迟加载延迟加载如何实现延迟加载一对一方式延迟加载一对多方式延迟加载 延迟加载 延迟加载:真正使用数据时才发起查询,不用的时候不查询。按需加载(懒加载)。 优点:先从单表查询,需要时再从关联表去...

    延迟加载

    • 延迟加载:真正使用数据时才发起查询,不用的时候不查询。按需加载(懒加载)。

    优点:先从单表查询,需要时再从关联表去关联查询,大大提高了数据库的性能,因为查询单表要比关联查询多张表的速度快的多。

    • 立即加载:不管用不用,只要一调用方法,马上发起查询。

    如何实现延迟加载

    
     - 我们在进行多表的操作时,在配置文件中通过resultMap实现一对多、
      多对一和一对一关系的操作,主要是通过association、collection
      具备延迟加载功能。
    
    

    一对一方式延迟加载

    1. 第一步:在SqlMapConfig.xml(配置文件)中配置延迟加载的全局开关,可取Mybatis官网参考配置
      在这里插入图片描述
      在这里插入图片描述
     <!-- 开启Mybatis支持延迟加载-->
        <settings>
            <setting name="lazyLoadingEnabled" value="true"></setting>
            <setting name="aggressiveLazyLoading" value="false"></setting><!--在3.4.1版本及其之后不用再写aggressiveLazyLoading 因为其默认值为false-->
        </settings>
    
    1. 第二步:在resultMap中设置association .
    <!--定义封装account和user的resultMap-->
        <resultMap id="accountUserMap" type="Account">
            <!--前三只能保证account的数据封装-->
            <id property="id" column="id"></id>
            <result property="uid" column="uid"></result>
            <result property="money" column="money"></result>
            <!--select指定的内容,查询用户的唯一标识(namespace+id)
            column属性指定的内容:用户根据id查询时,所需要的参数的值(account表的外键)-->
            <association property="user" column="uid" select="com.itheima.dao.IUserDao.findById"></association>
        </resultMap>
    

    测试:
    在这里插入图片描述
    延迟加载成功!
    在这里插入图片描述

    一对多方式延迟加载

       <!--配置user对象中的的accounts集合的映射-->
            <collection property="accounts" ofType="com.itheima.domain.Account" select="com.itheima.dao.IAccountDao.findAccountByUid" column="id">
            </collection>
    
    展开全文
  • Mybatis延时加载

    2019-08-18 11:57:31
    一、Mybatis延时加载 1.下载mybatis和数据库驱动包,并把关联驱动包也一起加入 2.加入配置文件 (1)db.properties (2)mybatis-config.xml (3)log4j.properties 3.根据数据库表创建实体(班级,老师,...

    一、Mybatis延时加载

    1.下载mybatis和数据库驱动包,并把关联驱动包也一起加入

    2.加入配置文件

           (1)db.properties

          

          (2)mybatis-config.xml

    (3)log4j.properties

    3.根据数据库表创建实体(班级,老师,学生)

    需求1:查询所有学生(非延时加载,使用ResultMap)

    需求1的查询是一次将所有的数据全部查出,注意SQL语句写好就可以了

    特别注意:这里配置的是SQL语句查询出来的表的字段和实体类的字段的映射,需要的字段就配置上去,不需要就不用配置上去

    测试类:

    需求2:查询所有学生(使用延时加载,使用ResultMap)

    需求2的查询其实只是查询单表,当需要的时候再查询子表

    这种情况需要首先开启延时加载

    然后对于子表(班级和老师)分别创建根据ID查询的mapper.xml

    对于主表来说,他只需要查询自己就可以了,但是他使用resultMap来映射子表

    这样就实现了延时加载。

    项目结构:

     

     

     

    展开全文
  • MyBatis延迟加载

    2021-08-20 23:04:01
    MyBatis延迟加载 延迟加载的定义: 延迟加载也叫懒加载、惰性加载,使用延迟加载可以提高程序的运行效率,针对于数据持久层的操作,在某些特定的情况下去访问特定的数据库,在其他情况下可以不访问某些表,从一定...
  • MyBatis延迟加载.pdf

    2021-09-13 15:20:40
    MyBatis延迟加载.pdf
  • mybatis延迟加载
  • mybatis 延时加载

    2019-05-29 21:13:31
    在一对多,或多对多中中一般采用延时加载延时加载就是指,真正使用数据时才发起查询,不用的时候不查询,按需加载(懒加载)。举例:一个用户有100个账户,查询用户时没必要把所有账户信息都显示,所以采用延时...
  • MyBatis 延迟加载

    2019-09-27 10:13:36
    MyBatis中的延迟加载,也称为懒加载,是指在进行表的关联查询时,按照设置延迟规则推迟对关联对象的select查询。例如在进行一对多查询的时候,只查询出一方,当程序中需要多方的数据时,mybatis再发出sql语句进行...
  • MyBatisMybatis 延迟加载1. 延迟加载简介2. 关联对象加载时机3. 直接加载4. 侵入式延迟加载5. 深度延迟加载6. 延迟加载总结 1. 延迟加载简介 MyBatis中的延迟加载,也称为懒加载,是指在进行表的关联查询时,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,820
精华内容 9,928
关键字:

mybatis延迟加载