MyBatis学习笔记——关联查询

关联查询

  • 一对一 是通过在任意一方的主键,引入对方主键作为外键来实现的,就是说主键与外键为同一字段
  • 一对多 是通过在“多”的一方,添加“一”的一方的主键作为外键
  • 多对多 是通过一张中间关系表,引入两张表的主键作为外键,两个主键成为联合主键或使用新的字段作为主键

在这里插入图片描述


  • user和orders:
    User 与orders:一个用户可以创建多个订单,一对多

  • orders和orderdetail:
    Orders 与 orderdetail:一个订单可以包括 多个订单明细,因为一个订单可以购买多个商品,每个商品的购买信息在orderdetail记录,一对多关系

  • orderdetail和items:
    Orderdetail 与 items:多个订单明细只对应一个商品信息,多对一


一对一

需求:

根据商品ID查找定单信息,包括用户名和地址
一个订单对应一个用户

方法一:扩展类实现
  1. 在复杂查询时,单表对应的po类已经不能满足结果集的映射,所以根据需求建立一个扩展类作为resultType的类型

    package com.hf.model;
    
    public class OrdersExt extends Orders {
        private String username;
        private String address;
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    
    
        @Override
        public String toString() {
            return "OrdersExt{" +
                    "username='" + username + '\'' +
                    ", address='" + address + '\'' +
                    '}'+super.toString();
        }
    }
    
    
  2. 声明订单接口

    package com.hf.mapper;
    
    import com.hf.model.Orders;
    import com.hf.model.OrdersExt;
    
    public interface OrderMapper {
    
    
        /**
         * 通过id查找
         * @param id
         * @return
         */
        public OrdersExt findOrderById(int id);
    }
    
    
  3. 在OrderMapper.xml中配置

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.hf.mapper.OrderMapper">
        <select id="findOrderById" resultType="ordersExt" parameterType="int">
            SELECT
                o.*,u.username,u.address
            FROM
                orders o ,user u
            WHERE
                u.id = o.user_id AND o.id = #{id}
        </select>
    
    </mapper>
    
  4. 在全局配置文件中加载配置文件

    <mapper resource="com/hf/mapper/OrderMapper.xml"></mapper>
    
  5. 测试

      @Test
        public void test1()
        {
            OrderMapper mapper = session.getMapper(OrderMapper.class);
    
            OrdersExt ordersExt = mapper.findOrderById(3);
    
            System.out.println(ordersExt);
    
        }
    

    在这里插入图片描述

方法二:在Orders类中实现一个User属性
  1. 在Orders类中添加一个User属性,并提供get/set方法
    在这里插入图片描述

  2. 在OrderMapper.java中声明接口方法

    /**
         * 通过id查找
         * @param id
         * @return
         */
        public Orders findOrderById2(int id);
    
  3. 在OrderMapper.xml中配置,使用resultMap

    <!--如果模型里面有模型,使用resultMap-->
    <resultMap id="orderResultMap" type="orders">
        <!--往Orders的模型匹配
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值