mybatis 多表查询一

1.实体类
Order对应主表,OrderDetail对应明细表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Order {
private Integer id;
private String orderCode;
private String name;
private String address;
private List<OrderDetail> orderDetails;//封装明细结果
......
}

public class OrderDetail {
private Integer id;
private Integer orderId;
private Integer productId;
......
}

2.xml文件
orderDetail对应的xml文件

1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="com.xiang.mapper.OrderDetailMapper">

<resultMap type="com.xiang.domain.OrderDetail" id="OrderDetailResult">
<id column="id" jdbcType="INTEGER" property="id"/>
<result column="orderId" jdbcType="INTEGER" property="orderId"/>
<result column="productId" jdbcType="INTEGER" property="productId"/>
</resultMap>

</mapper>

order对应的xml文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="com.xiang.mapper.OrderMapper">

<resultMap type="com.xiang.domain.Order" id="OrderResult">
<id column="orderId" jdbcType="INTEGER" property="id"/>
<result column="orderCode" jdbcType="VARCHAR" property="orderCode"/>
<result column="name" jdbcType="VARCHAR" property="name"/>
<result column="address" jdbcType="VARCHAR" property="address"/>
<collection property="orderDetails" resultMap="com.xiang.mapper.OrderDetailMapper.OrderDetailResult"/>
</resultMap>

<!-- 查询某姓名的订单 -->
<select id="queryOrders" parameterType="String" resultMap="OrderResult">
select master.id orderId,master.name,master.address,detail.id ,detail.productId,detail.orderId
from orderMaster master left join orderDetail detail
on master.id=detail.orderId where master.name = #{name}
</select>
</mapper>

注意别名和resultMap属性值对应
注意引用resultMap时需要带上namespace
3.dao

1
2
3
4
5
6
7
8
9
10
11
public List<Order> queryOrders(String name){
List<Order> orders = new ArrayList<Order>();
SqlSession sqlSession = null;
sqlSession = GetSqlSessionFactory.getInstance().getSqlSessionFactory().openSession();
if (sqlSession != null) {
OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
orders = orderMapper.queryOrders(name);
sqlSession.close();
}
return orders;
}

4.service

1
2
3
4
5
6
7
8
public List<Order> queryOrders(String name){
List<Order> orders = new ArrayList<Order>();
OrderDao orderDao = new OrderDao();
if (name != null && !"".equals(name)) {
orders = orderDao.queryOrders(name);
}
return orders;
}