MyBatis 框架学习——一对一关联映射和一对多关联映射

前言

在实际开发中我们不可能只是对单表进行操作,必然要操作多表,本文就来讲解多表操作中的一对一关联映射和一对多(或多对一)关联映射,至于多对多关联映射实质上也是两个一对多(或多对一)关联映射,所以在这里我并不打算讲解。先从一对一关联映射讲起。本文案例代码的编写是建立在前文案例基础之上的!

一、一对一关联映射

我以商品订单数据模型为例来讲解一对一关联映射,如下:

这里写图片描述

一对一查询

有这样一个需求:查询所有订单信息,关联查询下单用户信息。

注意:因为一个订单信息只会是一个人下的订单,所以从查询订单信息出发关联查询用户信息为一对一查询(值得注意的一点是这儿我将订单与用户的关系理解为一对多的关系,但实质上从订单角度出发,多个订单可属于一个用户,故订单与用户的关系应该是多对一的关系)。如果从用户信息出发查询用户下的订单信息则为一对多查询,因为一个用户可以下多个订单。

解决该需求,可有两种方法,先讲第一种方法。

方法一

使用resultType,定义订单信息po类,此po类中包括了订单信息和用户信息。在cn.itheima.mybatis.po包下新建一个OrderUser类:

public class OrderUser 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;
    }

}

OrderUser类继承Orders类后,OrderUser类包括了Orders类的所有字段,只需要定义用户的信息字段即可。
接着按照需求编写sql语句,在OrderMapper.xml映射文件中添加如下select元素:

<select id="getOrderUserList" resultType="orderuser">
    SELECT
        o.id,
        o.user_id userId,
        o.number,
        o.createtime,
        o.note,
        u.username,
        u.address
    FROM
        orders o
    LEFT JOIN `user` u ON o.user_id = u.id
</select>

紧接着在OrderMapper接口中编写如下方法:

List<OrderUser> getOrderUserList();

最后在OrderMapperTest单元测试类中编写如下测试方法:

@Test
public void testGetOrderUserList() {
    SqlSession sqlSession = sqlSessionFactory.openSession();
    OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
    List<OrderUser> orderList = orderMapper.getOrderUserList();
    for (OrderUser orderUser : orderList) {
        System.out.println(orderUser);
    }
    sqlSession.close();
}

在testGetOrderUserList方法中的以下代码处打一个断点:

for (OrderUser orderUser : orderList) {
  

然后以Debug模式运行该方法,大概就能看到你想要的结果了。

小结:定义专门的po类作为输出类型,其中定义了sql查询结果集所有的字段。此方法较为简单,企业中使用普遍。

方法二

使用resultMap,定义专门的resultMap用于映射一对一查询结果。首先在Orders类中加入user属性,user属性中用于存储关联查询的用户信息,因为订单关联查询用户是一对一关系,所以这里使用单个User对象存储关联查询的用户信息。这样Orders类的代码为:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值