在全局配置文件中
<!-- 全局配置参数 -->
<settings>
<!-- 开启延迟加载 -->
<setting name="lazyLoadingEnabled" value="true" />
<setting name="aggressiveLazyLoading" value="false" />
<!-- 打开二级缓存 -->
<setting name="cacheEnabled" value="true"/>
</settings>
配置文件中
type="orders"使用的是别名
<!-- 订单及用户的resultMap,实现延迟加载 -->
<resultMap type="orders" id="ordersResultMap">
<!-- 配置订单信息的映射 -->
<id column="id" property="id" />
<result column="user_id" property="user_id" />
<result column="order_number" property="order_number" />
<!-- 配置延迟加载 用户信息
select:延迟加载 时调用 的statement,如果跨命名空间,需要加上namespace
column:将哪一列的值作为参数 传到延迟加载 的statement -->
<association property="user" javaType="cn.itcast.mybatis.po.User"
select="cn.itcast.mybatis.mapper.UserMapper.findUserById" column="user_id">
</association>
</resultMap>
<!-- 订单信息查询,使用延迟加载 -->
<select id="findOrdersList" resultMap="ordersResultMap">
select * from orders
</select>
测试代码
// 测试延迟加载
@Test
public void testfindOrdersList() throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();
OrdersMapperCustom ordersMapperCustom = sqlSession
.getMapper(OrdersMapperCustom.class);
List<Orders> list = ordersMapperCustom.findOrdersList();
for (Orders orders : list) {
int order_id = orders.getId();// 取订单id
User user = orders.getUser();// 查询用户信息
}
}
orders类
package cn.itcast.mybatis.po;
import java.util.List;
/**
* 订单信息
* @author Thinkpad
*
*/
public class Orders {
private int id;//订单id
private int user_id;//用户id
private String order_number;//订单号
//用户信息
private User user;
//订单明细
private List<Orderdetail> orderdetails;
@Override
public String toString() {
return id+"..."+user_id+"..."+order_number;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getUser_id() {
return user_id;
}
public void setUser_id(int user_id) {
this.user_id = user_id;
}
public String getOrder_number() {
return order_number;
}
public void setOrder_number(String order_number) {
this.order_number = order_number;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public List<Orderdetail> getOrderdetails() {
return orderdetails;
}
public void setOrderdetails(List<Orderdetail> orderdetails) {
this.orderdetails = orderdetails;
}
}
user类
package cn.itcast.mybatis.po;
import java.io.Serializable;
import java.util.Date;
/**
*
* <p>Title: User</p>
* <p>Description: user表对应的po类</p>
* <p>Company: www.itcast.com</p>
* @author lzqiang
* @date 2015-08-11上午9:59:48
* @version 1.0
*/
public class User implements Serializable {
private int id;
private String username;// 用户姓名
private String sex;// 性别
private Date birthday;// 出生日期
private String address;// 地址
private String detail;// 详细信息
private Float score;// 成绩
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getDetail() {
return detail;
}
public void setDetail(String detail) {
this.detail = detail;
}
public Float getScore() {
return score;
}
public void setScore(Float score) {
this.score = score;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", sex=" + sex
+ ", birthday=" + birthday + ", address=" + address
+ ", detail=" + detail + ", score=" + score + "]";
}
}