其他分享
首页 > 其他分享> > MyBatis-分步查询的优势(延迟加载)

MyBatis-分步查询的优势(延迟加载)

作者:互联网

分步查询的优点:可以实现延迟加载  

但是必须在核心配置文件中设置全局配置信息(mybatis-config.xml):

lazyLoadingEnabled:延迟加载的全局开关。当开启时,所有关联对象都会延迟加载

(设为true之后,若只查询员工的信息,就不会查询部门信息)

    <settings>
        <!--将下划线映射为驼峰-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!--开启延迟加载-->
        <setting name="lazyLoadingEnabled" value="true"/>
    </settings>

aggressiveLazyLoading:当开启时,任何方法的调用都会加载该对象的所有属性。

否则,每个属 性会按需加载 此时就可以实现按需加载,获取的数据是什么,就只会执行相应的sql。

    <settings>
        <!--将下划线映射为驼峰-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!--开启延迟加载-->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!--按需加载-->
        <setting name="aggressiveLazyLoading" value="false"/>
    </settings>

此时可通过association和 collection中的fetchType属性设置当前的分步查询是否使用延迟加载,fetchType="lazy(延迟加 载)|eager(立即加载)"

<resultMap id="empAndDeptByStepResultMap" type="Emp">
        <id column="emp_id" property="empId"></id>
        <result column="emp_name" property="empName"></result>
        <result column="age" property="age"></result>
        <result column="gender" property="gender"></result>
        <!--
            property:设置需要处理映射关系的属性的属性名
            select:设置分步查询的sql的唯一标识
            column:将查询出的某个字段作为分步查询的sql的条件
            fetchType:在开启了延迟加载的环境中,通过该属性设置当前的分步查询是否使用延迟加载
            fetchType="eager(立即加载)|lazy(延迟加载)"
        -->
        <association property="dept" fetchType="eager"
                     select="com.atguigu.mybatis.mapper.DeptMapper.getEmpAndDeptByStepTwo"
                     column="dept_id"></association>
    </resultMap>

 

标签:fetchType,查询,分步,MyBatis,全局,加载,延迟
来源: https://www.cnblogs.com/Joyce-mi7/p/16643102.html