MyBatis之级联小结

在那此前大家驾驭了MyBatis为大家提供了三种级联:一对一事关(assocation)、一对多涉及(collection)、鉴定区别器(discriminator)。在最终二个鉴定分别器例子中,看到了当层级关系比较负责时,大家就像早就难以作答和保卫安全各样级联关系,在对数据库实行查询是还是不是使用MyBatis为大家提供的级联那亟需在事实上中去钻探和选取。在大家透过级联来查询新闻时会发现有3个题目,当我们只想查询出学生的平凡消息(姓名、性别),而不想询问出她的成绩、课程、体格检查表时,往日的五个例证不管您是或不是要求战绩、课程等音信它都会去执行,只要有贰个事关。那并不是大家所想要的,大家所想要的是,作者必要时才去实践那条sql,笔者索要战绩时才将此条sql发送到数据库查询出结果,不必要时就不必要发送到数据库实行查询。很兴奋的是,MyBatis为大家提供了这一急需,即:lazyLoadingEnabled。

笔者们在mybatis-config.xml配置文件中做一下配置:

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

那句话的情致正是我们地点所要想达到的效能——按需加载。但实际上唯有如此一句话是不够的,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 <!--以下省略-->

在第十行中大家对查询出学生的上学的小孩子证音信配置为延迟加载,第①1行中我们对查询出学生的学科成绩做了当时加载配置。

如上大概正是MyBatis级联的全部内容,至于用级联照旧用sql的join语句只有在实际上中去认真细致勘查和权衡。

网站地图xml地图