Ibatis 延迟加载(懒加载)
业务场景 :查询小米的身份信息(表A),通过延迟加载关联查询他的学习成绩信息(表B)
Table A(身份信息表)
STU_ID | STU_NAME | STU_AGE | STU_SEX |
123 | 小米 | 18 | 男 |
Table B(成绩表)
STU_ID | STU_CHINESE | STU_MATH | STU_ENGLISH |
123 | 66 | 77 | 88 |
映射的javaBean类
(身份信息表)
Class Information{
Private String stuId;
Private String name;
Private String age;
Private String sex;
Private Grade chengji;//声明懒加载映射类
Set....
Get...
...
}
(成绩表)
Class Grade{
Private String stuId;
Private String chinese;
Private String math;
Private String english;
Set....
Get...
...
}
<sqlMap namespace =”demo”>
<resultMap id=”lazyResultMap” class=”**.**.Information” >
<result column=”STU_ID” property=”stuId”>
<result column=”STU_NAME” property=”name”>
<result column=”STU_AGE” property=”age”>
<result column=”STU_SEX” property=”sex”>
<result column=”STU_ID” select=”demo.queryGrade” property=”chengji”>
//延迟加载映射,通过STU_ID作为参数去查询ibatis中namespace为demo下的queryGrade方法(如果queryGrade方法所需参数为实体,则column={stuId=STU_ID}),并返回结果映射到chengji属性中,触发查询需要前台或java中调用chengji属性
</resultMap>
<select id =“queryGrade” parameterClass=”java.lang.String” resultClass=”*.*.Grade”>
Select * from Grade where STU_ID=#param#
</select>
<select id =“lazyMethod1” parameterClass=”. . . ” resultMap=”lazyResultMap”>
Selct * from Information
</select>
</sqlMap>
前台页面触发
<input id=”” value=”${Information.chengji.chinese}” >