iBatis弄延迟加载的方式与hibernate如出一辙,都是使用cglib生成实体类的子类动态代理。
以一个比较典型的M:1的关系来说举例子
部门类
员工类
在员工类的映射文件中
SqlMapConfig.xml中把延迟加载功能打开。
以一个比较典型的M:1的关系来说举例子
部门类
public class Department {
private Integer id;
private String name;
private String location;
// 构造方法,getter,setter
}
员工类
public class Employee {
private Integer id;
private String name;
private String title;
private Department department;
// 构造方法,getter,setter
}
在员工类的映射文件中
<resultMap class="Employee" id="EmployeeLazy">
<result property="id" />
<result property="name" />
<result property="title" />
<result property="department" column="_dep_id" select="department.findDepartmentById" />
</resultMap>
SqlMapConfig.xml中把延迟加载功能打开。
<settings
enhancementEnabled="true"
lazyLoadingEnabled="true"
useStatementNamespaces="true"
/>