1.需求
查询订单及订单明细信息。
2.sql语句
确定主查询表:订单表
确定关联查询表:订单明细
在一对一查询基础上添加订单明细表关联即可
要求:
对orders的映射不能出现重复记录。
在orders.java中添加List<OrderDetail> orderDetails属性,最终将订单信息映射到orders中,订单所对应的订单明细映射到orders中的orderDetails属性中。
1)在Orders中添加List<OrderDetail> orderDetails属性
//订单明细 一对多查询使用
private List<OrderDetail> orderDetails;
public List<OrderDetail> getOrderDetails() {
return orderDetails;
}
public void setOrderDetails(List<OrderDetail> orderDetails) {
this.orderDetails = orderDetails;
}
2)OrderCustomMapper.xml
<!--查询订单关联查询用户及订单明细,使用resultMap-->
<select id="findOrdersAndOrderDetailResultMap" resultMap="OrdersAndOrderDetailResultMap">
SELECT orders.* ,user.username,user.sex,user.address,orderdetail.items_id,orderdetail.items_num,orderdetail.orders_id
FROM orders,user,orderdetail
WHERE orders.user_id=user.id and orderdetail.orders_id=orders.id
</select>
3)定义resultMap
<!-- 订单关联查询用户及订单明细
继承了单关联查询用户的resultMap
就不需要再写订单信息和用户信息的映射了
-->
<resultMap id="OrdersAndOrderDetailResultMap" type="com.chinglee.mybatis.pojo.Orders" extends="OrdersUserResultMap">
<collection property="orderDetails " ofType="com.chinglee.mybatis.pojo.OrderDetail">
<id column="orderdetail_id" property="id"/>
<result column="items_id" property="itemsId"/>
<result column="items_num" property="itemsNum"/>
<result column="orders_id" property="ordersId"/>
</collection>
</resultMap>
4)OrderCustomMapper.java
//查询订单(关联用户)及订单明细
public List<Order> findOrdersAndOrderDetailResultMap() throws Exception;
5)测试
@Test
public void findOrdersAndOrderDetailResultMapTest() throws Exception {
SqlSession sqlSession=sqlSessionFactory.openSession();
//创建代理对象
OrderCustomMapper orderCustomMapper= sqlSession.getMapper(OrderCustomMapper.class);
//调用mapper的方法
List<Order> list =orderCustomMapper.findOrdersAndOrderDetailResultMap();
System.out.println(list);
sqlSession.close();
}