延迟加载
在数据与对象进行 mapping 操作时,只有在真正使用到该对象时,才进行 mapping 操作,以减少数据库查询开销,从而提升系统性能。
但是Lazy Load也有缺点,在按需加载时会多次连接数据库, 同时会增加数据库的压力。所以在实际使用时,会衡量是否使 用 延迟加载。
mybatis默认没有开启延迟加载,需要在mybatis-config.xml中setting配置启动延时加载!
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>
lazyLoadingEnabled:true使用延迟加载,false禁用延迟加载, 默认为false。
aggressiveLazyLoading:
true启用时,当延迟加载开启时访问对 象中一个懒对象属性时,将完全加载这个对象的所有懒对象属性 。
false,当延迟加载时,按需加载对象属性(即访问对象中一个 懒对象属性,不会加载对象中其他的懒对象属性)。默认为true。
延迟加载需要多加入的架包:
设置一个实体类:
OrderMapper.xml
<resultMap type="orders" id="orderAndUser">
<id column="oids" property="id"></id>
<result column="orderid" property="orderid"/>
<result column="createtime" property="createtime"/>
<result column="note" property="note"/>
<association property="user" javaType="user"
select="com.xjx.mapper.UserMapper.selectUserById" column="userid">
</association>
</resultMap>
<!-- u.id uids,u.username,u.birthday,u.address -->
<select id="selectOrderAndUser" resultMap="orderAndUser">
select o.id oids,o.orderid,o.createtime,o.note,o.userid
from orders o,t_user u
where o.userid=u.id
</select>
当查询内容只有订单表中的内容的时候,不需要查询关联的用户表
当查询的内容包含用户表的时候,需要调用查询用户表
查询结果: