Mybatis关联查询

用户表user:
订单表:orders
订单明细表:orderdetail:
商品表:items

user和orders:
user—->orders:一个用户可以创建多个订单,一对多
orders—>user:一个订单只由一个用户创建,一对一

orders和orderdetail:
orders—>orderdetail:一个订单可以包括 多个订单明细,一对多
orderdetail–> orders:一个订单明细只能包括在一个订单中,一对一

orderdetail和items:
orderdetail—>itesms:一个订单明细只对应一个商品信息,一对一
items–> orderdetail:一个商品可以包括在多个订单明细 ,一对多

1.查询订单信息,关联查询创建订单的用户信息
一对一:orders—>user (一个订单只由一个用户创建)
1.1使用 ResultType

实体类

//继承Order然后添加User属性
public class OrdersCustom extends Orders{
    private String username;
    private String sex;
    private String address;
    /* get set方法*/
}

接口

    public List<OrdersCustom>findOrderUser()throws Exception;

xml

    <select id="findOrderUser" resultType="cn.itcast.mybatis.pojo.OrdersCustom">
    SELECT
        orders.* ,
        USER.username,
        USER.sex,
        USER.address
    FROM
        orders,  
        USER 
    where 
        orders.user_id=user.id
    </select>

1.2 使用ResultMap
实体类

//继承Order然后添加User属性
public class OrdersCustom extends Orders{
    private String username;
    private String sex;
    private String address;
    /* get set方法*/
}

接口

    public List<Orders>findOrdersUserResultMap()throws Exception;

xml

<resultMap type="cn.itcast.mybatis.pojo.Orders" id="OrdersUserResultMap">
    <id column="id" property="id"/>
    <result column="user_id" property="userId"/> 
    <result column="number" property="number"/>
    <result column="createtime" property="createtime"/>
    <result column="note" property="note"/>
    
  <association property="user"  javaType="cn.itcast.mybatis.pojo.User">
            <id column="user_id" property="id"/> 
            <result column="username" property="username"/>
            <result column="sex" property="sex"/>
            <result column="address" property="address"/>   
  </association> 
</resultMap>

 <select id="findOrdersUserResultMap" resultMap="OrdersUserResultMap">
    SELECT
        orders.* ,
        USER.username,
        USER.sex,
        USER.address
    FROM
        orders,
        USER 
    WHERE 
        orders.user_id=user.id
</select>

2.查询订单关联的订单明细信息
一对多:orders–>orderdetails(一个订单有多个明细)
实体类

//表orders
public class Orders {
    private Integer id;
    private Integer userId;
    private String number;
    private Date createtime;
    private String note;

    //添加user用户属性信息
    private User user;

    //添加订单明细 Orderdetail的属性信息
    private List<Orderdetail>orderdetails;
   
   /* get set方法*/    
}

接口

    public List<Orders>findOrdersAndOrderDetailResultMap()throws Exception;

xml

<resultMap type="cn.itcast.mybatis.pojo.Orders" id="OrdersAndOrderDetailResultMap" extends="OrdersUserResultMap">
    <collection property="orderdetails" ofType="cn.itcast.mybatis.pojo.Orderdetail">
        <id column="orderdetail_id" property="id"/>
        <result column="items_id" property="itemsId"/>
        <result column="items_num" property="itemsNum"/>
        <result column="orders_id" property="ordersId"/>
    </collection>     
</resultMap>

<select id="findOrdersAndOrderDetailResultMap" resultMap="OrdersAndOrderDetailResultMap">
    SELECT
        orders.* ,
        USER.username,
        USER.sex,
        USER.address,
        orderdetail.id orderdetail_id,<!--别名-->
        orderdetail.orders_id,
        orderdetail.items_id,
        orderdetail.items_num
    FROM
        orders,
        USER,
        orderdetail 
    WHERE 
        orders.user_id=user.id AND orderdetail.orders_id=orders.id
</select>

3.查询用户及用户购买的商品信息
多对多 user—>itesms(一个用户可以购买多个商品,一个商品可以被多个用户购买)

实体类

public class User{
    private String username;
    private String sex;
    private String address;
   
    //添加订单属性
    private List<Orders>orderList;
  
    /* get set方法*/
}
public class Orders{
    private Integer id;
    private Integer userId;
    private String number;
    private Date createtime;
    private String note;

    //添加user用户属性信息
    private User user;

    //添加订单明细 Orderdetail的属性信息
    private List<Orderdetail>orderdetails;
}
public class Orderdetail{
   
    /* ··· */

    //添加商品属性信息
    private Items items
}

接口

    public List<User>findUserAndItemsResultMap()throws Exception;

xml

<!-- 查询用户和购买商品的resultMap -->
<resultMap type="cn.itcast.mybatis.pojo.User" id="UserAndItemsResultMap">
<!-- (1) 配置用户信息 --> 
        <id column="user_id" property="id"/>
        <result column="username" property="username"/>
        <result column="sex" property="sex"/>
        <result column="address" property="address"/>       
<!-- (2) 配置订单信息,一个用户对应多个订单,使用collection映射 -->     
 <collection property="orderList" ofType="cn.itcast.mybatis.pojo.Orders">
        <id column="id" property="id"/>
        <result column="user_id" property="userId"/>
        <result column="number" property="number"/>
        <result column="createtime" property="createtime"/>
        <result column="note" property="note"/>
    <!-- (3) 配置订单明细信息 ,一个订单包括 多个订单明细 -->       
    <collection property="orderdetails" ofType="cn.itcast.mybatis.pojo.Orderdetail">
            <id column="orderdetail_id" property="id"/>
            <result column="items_id" property="itemsId"/>
            <result column="items_num" property="itemsNum"/>
            <result column="orders_id" property="ordersId"/>        
            <!-- (4) 配置商品信息,一个订单明细对应一个商品-->
            <association property="items" javaType="cn.itcast.mybatis.pojo.Items">
                <id column="items_id" property="id"/>
                <result column="items_name" property="name"/>
                <result column="items_detail" property="detail"/>
                <result column="items_price" property="price"/>
            </association>           
    </collection>  
 </collection>

</resultMap>

<select id="findUserAndItemsResultMap" resultMap="UserAndItemsResultMap">
    SELECT 
      orders.*,
      USER.username,
      USER.sex,
      USER.address,

      orderdetail.id orderdetail_id,
      orderdetail.items_id,
      orderdetail.items_num,
      orderdetail.orders_id,

      items.name items_name,
      items.detail items_detail,
      items.price items_price
    FROM
      orders,
      USER,
      orderdetail,
      items
    WHERE 
        orders.user_id = user.id AND orderdetail.orders_id=orders.id 
        AND orderdetail.items_id=items.id
</select>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值