mybatis系列:四、关联查询

案例模型

在这里插入图片描述
po

// 用户
public class User {
    private int id;
    private String username;
    private String sex;
    private Date birthday;
    private String address;
    private List<Orders> ordersList;
    ......
}

// 订单
public class Orders {
    private int id;				
    private String number;		
    private String note;		
    private Date createtime;	
    private int user_id;		
    private User user;			
    private List<Orderdetail> orderdetails;		
	......
}

// 订单详情
public class Orderdetail {
    private int id;
    private int items_id;
    private int items_num;
    private int orders_id;
    private Items items;
    ......
}

// 商品实体
public class Items {
    private int id;
    private String name;
    private float price;
    private String detail;
    private Date createtime;
    ......
}

查询之一对一

orders ----> user

方式一:自定义po类接收

sql

SELECT 
  orders.*,
  user.username,
  user.address
FROM
  orders,
  user 
WHERE orders.user_id = user.id

po

// 自定义订单实体
public class OrdersCustom extends Orders {
	private String username;
	private String address;
	......
}

mapper

<select id="findOrdersList" resultType="cn.ade.mybatis.po.OrdersCustom">
	SELECT
		user.username,
		user.address
		orders.*,
	FROM
		user u, orders o	
	WHERE u.id= o.user_id 
</select>

方式二:resultMap之association

<!-- 订单信息resultmap -->
<resultMap id="userOrderMap" type="cn.ade.mybatis.po.Orders">
	<id property="id" column="id"/>
	<result property="user_id" column="user_id"/>
	<result property="number" column="number"/>
	
	<!-- 进行关联查询单条记录 -->
	<association property="user" javaType="cn.itcast.mybatis.po.User">
		<id property="id" column="user_id"/>
		<result property="username" column="username"/>
		<result property="address" column="address"/>
	</association>
</resultMap>


<select id="findOrdersList" resultMap="userOrderMap">
	SELECT
		user.username,
		user.address
		orders.*,
	FROM
		user u, orders o	
	WHERE u.id= o.user_id 
</select>

查询之一对多

orders ----> orderdetail

<resultMap id="ordersAndUserByResultMap" type="cn.ade.mybatis.po.Orders">
    <!-- 订单信息的映射 -->
    <id property="id" column="id"/>
    <result property="user_id" column="user_id"/>
    <result property="number" column="number"/>
    <result property="createtime" column="createtime"/>
    <result property="note" column="note"/>

    <!-- 用户信息的映射 -->
    <association property="user" javaType="cn.ade.domain.User">
        <id property="id" column="user_id"/>
        <result property="username" column="username"/>
        <result property="address" column="address"/>
    </association>
</resultMap>

<resultMap id="OrdersAndOrderDetailByResultMap" type="cn.ade.mybatis.po.Orders" extends="ordersAndUserByResultMap">
    <!-- 订单和用户的信息采用继承的方式 -->
    <!-- 订单详情的映射 -->
    <collection property="orderdetails" ofType="cn.ade.domain.Orderdetail">
        <id property="id" column="orderdetail_id"/>
        <result property="items_id" column="items_id"/>
        <result property="items_num" column="items_num"/>
    </collection>
</resultMap>

<select id="findOrdersAndOrderDetailByResultMap" resultMap="OrdersAndOrderDetailByResultMap">
    SELECT
      o.*,
      u.username,
      u.address,
      od.id orderdetail_id,
      od.items_id,
      od.items_num
    FROM orders o, orderdetail od, user u
    WHERE o.user_id = u.id AND od.orders_id = o.id;
</select>

查询之多对多

user---->items

<resultMap id="userAndItemsResultMap" type="cn.ade.domain.User">
    <!-- 用户信息映射 -->
    <id property="id" column="user_id"/>
    <result property="username" column="username"/>
    <result property="address" column="address"/>

    <!-- 用户中订单集合的映射 -->
    <collection property="ordersList" ofType="cn.ade.domain.Orders">
        <id property="id" column="id"/>
        <result property="number" column="number"/>
        <result property="createtime" column="createtime"/>
        <result property="note" column="note"/>
        <result property="user_id" column="user_id"/>

        <!-- 订单中订单详情的映射 -->
        <collection property="orderdetails" ofType="cn.ade.domain.Orderdetail">
            <id property="id" column="orderdetail_id"/>
            <result property="items_id" column="items_id"/>
            <result property="items_num" column="items_num"/>

            <!-- 商品详情的映射 -->
            <association property="items" javaType="cn.ade.domain.Items">
                <id property="id" column="items_id"/>
                <result property="name" column="name"/>
            </association>
        </collection>
    </collection>
</resultMap>

<select id="findUserAndItems" resultMap="userAndItemsResultMap">
    SELECT
      o.*,
      u.username,
      u.address,
      od.id orderdetail_id,
      od.items_id,
      od.items_num,
      i.name
    FROM orders o, orderdetail od, user u, items i
    WHERE o.user_id = u.id AND od.orders_id = o.id AND od.items_id = i.id;
</select>
发布了48 篇原创文章 · 获赞 1 · 访问量 1041

猜你喜欢

转载自blog.csdn.net/laonxs/article/details/105169431