需求:查询订单,查询出一个下单人信息并查询出订单详情 (解析:一个订单可以有多个订单详情(一个订单详情里面是一个商品),所以来说,订单对订单详情是一对多的情况)
SQL语句: select u.id uid,u.user_name,u.password,u.name,u.age,u.sex,u.birthday,u.created,u.updated,o.id oid,o.user_id,o.order_number,od.id odid,od.order_id,od.item_id,od.total_price,od.status from tb_user u,tb_order o,tb_orderdetail od where u.id = o.user_id and o.id = od.order_id and o.order_number = #{orderNumber} 创建order实体: package com.hisoft.pojo; import java.util.List; public class Order { int id; long userId; String orderNumber; User user; List<OrderDetail> olist;//创建详情的list(一个订单里面存放多个订单详情,将多个订单详情存放到list集合里面) public List<OrderDetail> getOlist() { return olist; } public void setOlist(List<OrderDetail> olist) { this.olist = olist; } public int getId() { return id; } public void setId(int id) { this.id = id; } public long getUserId() { return userId; } public void setUserId(long userId) { this.userId = userId; } public String getOrderNumber() { return orderNumber; } public void setOrderNumber(String orderNumber) { this.orderNumber = orderNumber; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } public Order(int id, long userId, String orderNumber, User user) { super(); this.id = id; this.userId = userId; this.orderNumber = orderNumber; this.user = user; } public Order() { super(); // TODO Auto-generated constructor stub } @Override public String toString() { return "Order [id=" + id + ", userId=" + userId + ", orderNumber=" + orderNumber + ", user=" + user + ", olist=" + olist + "]"; } } 配置orderMapper.xml文件 (注意这里的resultMap标签里面采用了 继承,建议看到这里,如果采用这个resultMap的话看下我的一对一,进行复制一对一的resultMap) <resultMap type="Order" id="OrderUserDetailInfo" autoMapping="true" extends="OrderUserInfo"> <collection property="olist" javaType="List"//这里property对应的是存放订单详情的属性名,注意:这个javaType要和实体类里面存放一对多这个多的类型,就比如上边的List ofType="OrderDetail">//这个ofType 是实体类里面集合里面的泛型(以上边的为例List<OrderDetail>) <id column="odid" property="id" /> </collection> </resultMap> <select id="getOrderUserDetailInfo" resultMap="OrderUserDetailInfo"> select u.id uid,u.user_name,u.password,u.name,u.age,u.sex,u.birthday,u.created,u.updated,o.id oid,o.user_id,o.order_number,od.id odid,od.order_id,od.item_id,od.total_price,od.status from tb_user u,tb_order o,tb_orderdetail od where u.id = o.user_id and o.id = od.order_id and o.order_number = #{orderNumber} </select> 测试类 public class OrderTest { // new 一个userDao对象 private OrderMapper orderMapper; private SqlSession sqlSession;// 定义成全局的对象 @Before // 执行test方法之前执行 public void setUp() throws Exception { String resource = "mybatis-config.xml"; // 读取xml配置文件 InputStream is = Resources.getResourceAsStream(resource); // 构建SqlSessionFactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is); // 打开SqlSession,得到sqlSession可以进行curd的操作 sqlSession = sqlSessionFactory.openSession(); // userDao = new UserDaoImpl(sqlSession); // 获取mapper的动态代理实现类 orderMapper = sqlSession.getMapper(OrderMapper.class); } @Test public void getOrderUserOrderDetailInfo() { Order order = orderMapper.getOrderUserDetailInfo("20140921001"); List<OrderDetail> olist = order.getOlist(); for (OrderDetail orderDetail : olist) { System.out.println(orderDetail); } } }