MyBatis延迟加载
一对一
SqlMapConfig.xml
<configuration><!--开启延迟加载-->
<settings>
<!--延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。-->
<setting name="lazyLoadingEnabled" value="true"/>
<!--开启时,任一方法的调用都会加载该对象的所有延迟加载属性。 否则,每个延迟加载属性会按需加载(参考 lazyLoadTriggerMethods)。-->
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
...</configuration>
Mapper映射文件
<resultMap id="lazyMap" type="Account">
<id property="id" column="id"></id>
<result property="uid" column="uid"></result>
<result property="money" column="money"></result>
<!--column必填,指定传参属性,select指定全限定类目.方法名,延迟加载时会调用该方法的sql去填充数据,所以先确保该方法正确-->
<association property="user" javaType="user" column="uid" select="com.company.dao.IUserMapper.findByUid">
</association>
</resultMap>
<select id="findAll" resultMap="lazyMap">
SELECT
*
FROM
account
</select>
一对多
Mapper映射文件
<!--type和ofType都使用了别名--><resultMap id="lazyMap" type="user">
<id property="id" column="id"></id>
<result property="username" column="username"></result>
<result property="birthday" column="birthday"></result>
<result property="sex" column="sex"></result>
<result property="address" column="address"></result>
<!--配置一对多属性-->
<collection property="accounts" ofType="Account" select="com.aiitec.dao.IAccountMapper.findByUid" column="id">
</collection>
</resultMap>
<select id="findAll" resultMap="lazyMap">
SELECT
*
FROM
USER
</select>