一 一对多查询-概述
1 需求
- 查询订单及订单明细
2 sql语句:
- 确定主查询表:订单表 orders
- 确定关联查询表:订单明细表 Orderdetail
SELECT
orders.*,
user.username,
user.sex,
user.address,
orderdetail.id orderdetail_id,
orderdetail.items_id,
orderdetail.item_num,
orderdetail.orders_id
FROM
orders,
USER,
orderdetail
WHERE orders.user_id = user.id AND orderdetail.orders_id=orders.id
3 要求
- 对orders映射不能出现重复记录
4 思路
- 在orders.java类中添加List
orderDetail属性 - 最终会将订单信息映射到orders中,订单所对应的订单明细映射到orders中的ordersDetail属性中。
- 映射成的orders记录数为三条(orders信息不重复)
- 每个orders中的orderDetails属性存储了该订单所对应的订单明细
二 一对多查询-实现
1 在orders.java类中添加ListOrderdetailBean属性,并生成get和set方法
2 OrdersMapperCustom
3 OrdersMapperCustom接口
public List findOrdersAndOrderdetailResultMap() throws Exception;
4 OrdersMapperTest 测试
@Test
public void findOrdersAndOrderdetailResultMap() throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();
OrdersMapperCustom ordersMapperCustom = sqlSession.getMapper(OrdersMapperCustom.class);
List ordersBeans = ordersMapperCustom.findOrdersAndOrderdetailResultMap();
System.out.println(ordersBeans);
}
三 多对多查询-概述
1 需求
- 查询用户及用户购买商品信息
2 sql语句
查询主表是:用户表
关联表:由于用户和商品没有直接关联,通过订单和订单明细进行关联,所以关联表orders,orderdetail,items
SELECT
orders.*,
user.username,
user.sex,
user.address,
orderdetail.id orderdetail_id,
orderdetail.items_id,
orderdetail.item_num,
orderdetail.orders_id,
items.name items_name,
items.detail items_detail,
items.price items_price
FROM
orders,
USER,
orderdetail,
items
WHERE orders.user_id = user.id AND orderdetail.orders_id=orders.id AND orderdetail.items_id = items.id
3 思路
- 将用户信息映射到user中。
- 在UserBean类中添加订单列表属性List
ordersBean,将用户创建的订单映射到ordersBean。 - 在OdersBean中添加订单明细列表属性List
orderDetailBeans,将订单的明细映射到orderDetailBeans。 - 在OrderDetail中添加items属性ItemsBean itemsBean,将订单明细所对应的商品映射到itemsBean。
四 多对多查询-实现
1 配置映射
2 OrdersMapperCustom
3 接口
public List findUserAndItemsResultMap() throws Exception;
4 测试
@Test
public void findUserAndItemsResultMap() throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();
OrdersMapperCustom ordersMapperCustom = sqlSession.getMapper(OrdersMapperCustom.class);
List userBeans = ordersMapperCustom.findUserAndItemsResultMap();
System.out.println(userBeans);
}