MyBatis延迟加载
延迟加载的定义:
延迟加载也叫懒加载、惰性加载,使用延迟加载可以提高程序的运行效率,针对于数据持久层的操作,在某些特定的情况下去访问特定的数据库,在其他情况下可以不访问某些表,从一定程度上减少了java应用与数据库的交互次数。
例如:
查询学生和班级时,学生和班级是两张不同的表,如果当前需求只需要获取学生的信息,那么查询学生单表即可,如果需要同学生获取对应的班级信息,则必须查询两张表。
不同的业务需求,需要查询不同的表,根据具体的业务需求来动态减少数据表查询的工作就是延迟加载。
在congfig.xml中开启延迟加载
<settings>
<!-- 打印SQL-->
<setting name="logImpl" value="STDOUT_LOGGING"/>
<!-- 开启延迟加载 -->
<setting name="lazyLoadingEnabled" value="true"/>
</settings>
将多表关联查询拆分成多个单表查询
StudentRepository
Student findByIdLazy(long id);
StudenRepository.xml
<resultMap id="studentMapLazy" type="com.oyrf.frist.Student">
<id column="id" property="id"></id>
<result column="name" property="name"></result>
<association property="classes" select="com.oyrf.repository.ClassessRepository.findByIdLazy" column="cid">
</association>
</resultMap>
<select id="findByIdLazy" parameterType="long" resultMap="studentMapLazy">
SELECT * from student where id = #{id}
</select>
ClassesRepository
Classes findByIdLazy(long id);
ClassesRepository.xml
<select id="findByIdLazy" parameterType="long" resultType="com.oyrf.frist.Classes">
select * from classes where id = #{id}
</select>