MyBatis学习系列七:多表查询一

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

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文件

<?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文件

<?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

    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

    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;
    }

你可能感兴趣的:(mybatis)