需求:查询订单,查询出一个下单人信息并查询出订单详情
(解析:一个订单可以有多个订单详情(一个订单详情里面是一个商品),所以来说,订单对订单详情是一对多的情况)
- 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);
}
}
}