将采用高级映射实现多表联查时向数据库发出的SQL语句拆分成若干条单表查询的SQL语句,当需要返回数据时才会向数据库发出只针对当前数据的SQL语句。
实现延迟加载的前提条件
在settings中配置与延迟加载有关的属性.
下面是XML的映射文件LazyLoadingMapper.xml
注意两点:
1、元素association、collection中的colunm属性,如果传递的参数只有一个,直接使用user_id即可,如果是多个可以使用{user_id=id,user_nam=userName}来传递。
2、resultType属性:若查询结果是集合,那应该是集合可以包含的类型,而不能是集合本身。使用 resultType 或 resultMap,但不能同时使用。
public interface OrderMapper {
Order queryOrderUserLazy(@Param("orderNumber") String orderNumber);
}
测试代码
public class OrderMapperTest {
private OrderMapper orderMapper;
@Before
public void setUp() throws Exception {
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession openSession = build.openSession(true);
orderMapper = openSession.getMapper(OrderMapper.class);
}
//
@Test
public void testQueryOrderUserLazy() {
Order order = orderMapper.queryOrderUserLazy("20140921001");
System.out.println(order.getOrderNumber());
System.out.println(order.getUser());
System.out.println(order.getOrderdetail());
}
}
测试结果
另外附上表关系图及全局配置文件
Mybatis-config.xml配置