MyBatisMyBatis之级联小结

以当时之前我们知晓了MyBatis为咱提供了三栽级联:一针对同关乎(assocation)、一对准大多关系(collection)、鉴别器(discriminator)。在最后一个鉴别器例子中,看到了当层级关系比负责时,我们像早已难以对以及掩护各种级联关系,在针对数据库进行询问是否采取MyBatis为咱提供的级联这需要在骨子里被失琢磨与选。在咱们透过级联来查询信息经常见面发现产生一个题目,当我们只是想查询有学生的常见信息(姓名、性别),而休思量查询有他的成就、课程、体检表时,之前的老三单例不管你是不是要成绩、课程等信息它还见面去实施,只要来一个关乎。这并无是咱所想如果的,我们所思要之是,我索要经常才去实施及时长达sql,我急需成绩时才以此条sql发送至数据库查询有结果,不欲时虽未待发送至数据库进行查询。很高兴的凡,MyBatis为咱提供了当时同一要求,即:lazyLoadingEnabled。

咱以mybatis-config.xml配置文件被举行一下配备:

<settings>
    <setting name="lazyLoadingEnabled" value="true"/><!-- 开启懒加载模式(按需加载),默认情况下是即时加载 -->
</settings>

立句话的意就是是咱地方所而惦记达到的意义——按需加载。但实质上只有这样一词话是不够的,MyBatis的延加载方式是遵照层级延迟加载。

MyBatis 1

当我们于询问学生的核心信息经常,MyBatis会根据鉴别器去找到健康状况。而以当我们看课程成绩时,由于学生证和学科成绩由同一层级,所以学生证明否会见随着吃加载。只有课程不是同课程成绩由同一层级,所以它不见面吃加载。这尚无达成我们纪念使的“按需要加载”效果,我们所思只要上的按需要加载是真的只有采取的上才会失掉加载。这个时候就得在刚的布置文件中重复开以下的配置:

<settings>
    <setting name="lazyLoadingEnabled" value="true"/><!-- 开启懒加载模式(按需加载),默认情况下是即时加载 -->
    <setting name="aggressiveLazyLoading" value="false"/>
</settings>

attressiveLazyLoading配置起,意思就是是其一意思——侵略性延迟加载。

及时实则是于mybatis-config.xml文件中开的全局配置,当思只要本着少数性能进行延期加载,对一些性能进行即时加载时,我们可细化到具体的mapper映射配置文件被去。例如StudentMapper.xml:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE mapper  
 3   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  
 4   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 <mapper namespace="day_8_mybatis.mapper.StudentMapper">
 6     <resultMap type="day_8_mybatis.pojo.Student" id="studentMap">
 7         <id property="id" column="id"/>
 8         <result property="name" column="name"/>
 9         <result property="sex" column="sex"/>
10         <association property="selfCard" column="id" select="day_8_mybatis.mapper.SelfCardMapper.findSelfCardByStudentId" fetchType="lazy"/>
11         <collection property="courseScoreList" column="id" select="day_8_mybatis.mapper.CourseScoreMapper.findCourseScoreByStudentId" fetchType="eager"/>
12         <discriminator javaType="string" column="sex">
13             <case value="男" resultMap="maleStudentMap"/>
14             <case value="女" resultMap="femaleStudentMap"/>
15         </discriminator>
16     </resultMap>
17 <!--以下省略-->

当第10履行吃我们针对查询有学生的学习者证明信息配置为延迟加载,第11实践中我们本着查询有学生的课成绩做了即加载配置。

以上几乎就是MyBatis级联的全部内容,至于用级联还是因此sql的join语句子只有以事实上中失认真仔细勘察和权衡。

网站地图xml地图