一个客户有多个订单
当需要时发出sql语句进行查询
resultMap的子标签association和collection具有延迟加载的功能
SqlMapConfig.xml <settings>
<!-- 开启延迟加载的功能 lazyLoadingEnabled:延迟加载是否启用,默认值为false aggressiveLazyLoading:积极的延迟加载,默认值为true 设置为false,属性按需加载 --> <setting name="lazyLoadingEnabled" value="true"/> <setting name="aggressiveLazyLoading" value="false"/> </settings> |
Mapper.xml <resultMap type="order" id="orderAndUserRstMapLazy"> <id property="id" column="id"/> <result property="number" column="number"/> <result property="note" column="note"/>
<!-- 当加载订单时,延迟加载与之关联的用户信息 需要时发出sql语句查询(执行statement) select:指定statement的id 如果在同一个mapper下,直接使用id的值 如果不在同一个mapper下,需要名称空间+id的值 column:指定两张表的关联字段,外键 --> <association property="user" javaType="user" select="com.gw.mapper.UserMapper.findById" column="user_id"> </association>
</resultMap> <select id="findOrderAndUserRstMapLazy" resultMap="orderAndUserRstMapLazy"> select * from orders </select> |
//延迟加载 public void testFindOrderAndUseRstType() { SqlSession session = sqlSessionFactory.openSession(); OrderMapper orderMapper = session.getMapper(OrderMapper.class);
List<Order> orders = orderMapper.findOrderAndUserRstMapLazy(); //System.out.println(orders); for(Order o : orders) { System.out.println(o.getNote()+o.getUser()); } } |