懒加载的配置以及原理
懒加载的配置
懒加载,就是需要使用到数据的时候才进行加载,不需要用到数据的时候就不加载。
好处:先从单表查询,需要时再从关联表去关联拆线呢,大大提高数据库的性能,因为单表查询远远高于多表查询的速度。
坏处:因为只有遇到数据的时候,才会进行数据库查询,这样在大批量数据查询的时候,因为查询工作也要消耗时间。所以可能会造成用户的等待时间变长。
我们开启懒加载的步骤一共有两步:
1. 在xml文件中配置setting开启懒记载
2. 书写函数和resultMap
开启懒加载
<settings>
<!--开启懒加载-->
<setting name="lazyLoadingEnabled" value="true"/>
<!--将积极加载改为按需加载-->
<setting name="aggressiveLazyLoading" value="false"/>
<!-- 开启驼峰命名-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
<!--解决toString方法触发懒加载-->
<setting name="lazyLoadTriggerMethods" value=""/>
</settings>
书写函数以及resultMap
其中fetchType的意思是用哪种方式加载函数,lazy是懒加载,eager是紧急加载。select是调用的方法名字。column的意思是根据主体表中的哪个字段去关联查询附表。property的意思是实体类中的属性。
<resultMap id="StudentLazy" type="Student">
<id property="sId" column="s_id"></id>
<result property="sName" column="s_name"></result>
<result property="sSex" column="s_sex"></result>
<collection property="scoreList" column="s_id" select="com.aaa.Dao.ScoreDao.findScoreBysId" fetchType="lazy"></collection>
</resultMap>
<select id="findAllStudentLazy" resultMap="StudentLazy" >
select * from student
</select>
调用的函数
<select id="findScoreBysId" resultType="Score">
select * from score where s_id=#{sId}
</select>
懒加载禁用无关tostring等方法触发配置:
<!--解决toString方法触发懒加载-->
<setting name="lazyLoadTriggerMethods" value=""/>