1.查询多对多
需求:
查询用户购买的商品,包括用户信息,订单信息,订单详细信息,商品信息
SQL语句:
SELECT user.id,user.username,user.address, orders.iduser_orders_id,orders.number,orders.note, orderdetail.idorderdetail_id,orderdetail.items_id,orderdetail.items_num, items.nameitems_name,items.detail items_detail FROM user,orders,orderdetail,items WHERE user.id = orders.user_id AND orders.id = orderdetail.orders_id ANDorderdetail.items_id = items.id; |
修改domain类(UserMapper.java)
package cn.mybatis.mapper.domain; import java.util.List; /** * 用户的扩展类 * @author刘泽栋 * @date 2015年6月22日下午1:45:15 */publicclass UserExt extends User { // 这里定义User类的扩展属性 // 一个用户下有多个订单 public List |
在OrdersExt类中添加List<OrderdetailExt>属性(OrdersExt.java)
publicclass OrdersExt extends Orders { /** * 添加用户的属性 */ private String username; private String sex; private String address; // 用户信息 private User user; // 订单明细 private List |
编写mapper接口 (UserMapper.java)
//多表查询,查询用户信息,包括订单信息,订单明细,购买商品信息publicList |
编写映射文件(UserMapper.xml)
编写测试代码(UserMapperTest.java)
/** * 测试多表查询 * 多表查询,查询用户信息,包括订单信息,订单明细,购买商品信息 */ @Test publicvoidfindUserByItemsTest() throws Exception { SqlSession sqlSession = sqlSessionFactory.openSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); List |
小结
一对多是多对多的一个特例。
一对多的使用方式中,resultType和resultMap各自有不同的应用场景:
resultType:
查询用户名称、用户性别、用户地址、商品名称、商品价格。
resultMap:
先查询用户信息,然后鼠标移动上去,显示商品明细信息。
resultMap的嵌套查询可以使用延迟加载的功能