springboot + mybatis-plus实现多表联合查询功能(注解方式)

下面是详细讲解“springboot + mybatis-plus实现多表联合查询功能(注解方式)”的完整攻略。

1. 简介

Mybatis-plus是一个强大的 ORM 框架,它可以极大地提高我们开发的效率,并且具有更好的性能表现。在多表联合查询的场景中,mybatis-plus的注解方式可以帮助我们快速实现。

2. 实现步骤

2.1. 添加依赖

在pom.xml文件中,添加相应的依赖。

<dependency>
   <groupId>com.baomidou</groupId>
   <artifactId>mybatis-plus-boot-starter</artifactId>
   <version>${mybatis-plus.version}</version>
</dependency>

2.2. 实体类设计

首先我们需要设计实体类。这里以几个表之间的联合查询为例,假设我们有三个表:

  1. User表,存储用户信息
  2. Order表,存储订单信息
  3. Goods表,存储商品信息

为了方便演示,我们定义以上三个表的实体类。

public class User {
    private Long id;
    private String name;
    private Integer age;
    // getter和setter
}

public class Order {
    private Long id;
    private Long userId;
    private Long goodsId;
    // getter和setter
}

public class Goods {
    private Long id;
    private String name;
    private Double price;
    // getter和setter
}

2.3. 定义Mapper接口

定义Mapper接口,在接口方法上使用Mybatis-plus提供的注解,该注解的参数就是对应的SQL语句。

@Mapper
public interface MyMapper {
    @Select("SELECT u.*, g.*, o.* FROM user AS u INNER JOIN order AS o ON u.id = o.user_id INNER JOIN goods AS g ON g.id = o.goods_id WHERE u.id = #{id}")
    List<Map<String,Object>> selectMultiTableByUserId(Long id);
}

2.4. 编写 Service 层代码

编写 Service 层代码,模块化的方式,每个功能对应一个方法,方便管理。

@Service
public class MyService {
    @Autowired
    private MyMapper myMapper;

    public List<Map<String,Object>> selectMultiTableByUserId(Long id) {
        return myMapper.selectMultiTableByUserId(id);
    }
}

2.5. 编写 Controller 层代码

编写Controller层代码,提供Restful API接口。

@RestController
@RequestMapping("/api")
public class MyController {
    @Autowired
    private MyService myService;

    @GetMapping("/query")
    public List<Map<String,Object>> queryMultiTableByUserId(@RequestParam Long id) {
        return myService.selectMultiTableByUserId(id);
    }
}

至此,我们的多表联合查询的功能已经实现了。

3. 示例说明

为了更好的说明,这里我们提供两个示例,分别是查询用户的订单信息和查询订单的商品信息。

3.1. 查询用户的订单信息

查询用户的订单信息,需要联合查询user、order和goods表,根据用户id获取用户在订单中的信息和订单中商品的信息。

假设我们已经在User表中插入了一条记录:

User{id=1, name='amy', age=21}

在Order表中插入了两条记录:

Order{id=1, userId=1, goodsId=2}
Order{id=2, userId=1, goodsId=3}

在Goods表中插入了两条记录:

Goods{id=2, name='Apple', price=5.50}
Goods{id=3, name='Banana', price=2.80}

此时我们可以查询用户的订单信息:

@GetMapping("/order")
public List<Map<String,Object>> queryOrderByUserId(@RequestParam Long id) {
    return myService.selectMultiTableByUserId(id);
}

查询结果为:

[
  {
    "id": 1,
    "name": "amy",
    "age": 21,
    "id": 1,
    "user_id": 1,
    "goods_id": 2,
    "id": 2,
    "name": "Apple",
    "price": 5.5
  },
  {
    "id": 1,
    "name": "amy",
    "age": 21,
    "id": 2,
    "user_id": 1,
    "goods_id": 3,
    "id": 3,
    "name": "Banana",
    "price": 2.8
  }
]

可以看到,每条记录包含了用户的信息、订单的信息和商品的信息。

3.2. 查询订单的商品信息

查询订单的商品信息,需要联合查询order和goods表,根据订单id获取商品的信息。

@Mapper
public interface MyMapper {
    @Select("SELECT * FROM order AS o INNER JOIN goods AS g ON g.id = o.goods_id WHERE o.id = #{id}")
    List<Map<String,Object>> selectGoodsByOrderId(Long id);
}

查询结果为:

[
  {
    "id": 1,
    "goods_id": 2,
    "goods.id": 2,
    "name": "Apple",
    "price": 5.5
  }
]

可以看到,每条记录包含了订单和商品的信息。

4. 总结

通过以上步骤,我们可以成功地实现多表联合查询的功能。Mybatis-plus提供了方便的注解方式,让我们开发更加高效。同时也要注意SQL语句的书写,如果SQL语句复杂,可以使用Mybatis-plus提供的wrapper封装SQL语句,让SQL语句更加简洁易懂。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot + mybatis-plus实现多表联合查询功能(注解方式) - Python技术站

(1)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • Django的性能优化实现解析

    下面就为您详细讲解“Django的性能优化实现解析”的完整攻略。 1. 针对数据库查询的优化 1.1. 使用select_related和prefetch_related 使用 select_related 和 prefetch_related 可以有效的减少数据库查询的次数,从而提高查询性能。 select_related 当遇到一个 ForeignKey…

    database 2023年5月19日
    00
  • 如果redis没有设置expire,他是否默认永不过期?

    通过EXPIRE key seconds 命令来设置数据的过期时间。返回1表明设置成功,返回0表明key不存在或者不能成功设置过期时间。在key上设置了过期时间后key将在指定的秒数后被自动删除。被指定了过期时间的key在Redis中被称为是不稳定的。 Redis key过期的方式有三种: 惰性删除:当读/写一个已经过期的key时,会触发惰性删除策略,直接删…

    Redis 2023年4月13日
    00
  • sqlserver分页的两种写法分别介绍

    首先我们来讲解下SQL Server中实现分页的两种写法。 1. 使用 OFFSET FETCH 子句实现分页 使用 OFFSET FETCH 子句是较新版本的 SQL Server 中使用的一种分页方式,其基本语法如下: SELECT 列名 FROM 表名 ORDER BY 排序列名 OFFSET 开始位置 ROWS FETCH NEXT 查询返回的行数 …

    database 2023年5月21日
    00
  • 太坑了吧!一次某某云上的redis读超时排查经历

    一次排查某某云上的redis读超时经历 性能排查,服务监控方面的知识往往涉及量广且比较零散,如何较为系统化的分析和解决问题,建立其对性能排查,性能优化的思路,我将在这个系列里给出我的答案。 问题背景 最近一两天线上老是偶现的redis读超时报警,并且是业务低峰期间,甚是不解,于是开始着手排查。 以下是我的排查思路。 排查思路 查阅 redis 慢查询日志 既…

    Redis 2023年4月13日
    00
  • Redis数据库安全详解

    Redis数据库安全攻略 1. Redis数据库安全威胁 Redis是一个非关系型数据库,具有快速、高性能、分布式、可扩展等特点。但同时,由于其使用方式和架构设计的特殊性,也容易受到多种安全威胁。这些威胁包括: 未授权访问:由于Redis默认配置不需要密码即可访问,如果未进行密码设置或正确的网络隔离,攻击者可以通过网络直接访问到Redis实例并进行恶意操作。…

    database 2023年5月18日
    00
  • SQL 描述Oracle数据字典视图

    Oracle 数据字典视图是 Oracle 数据库管理的重要组成部分,它包含了 Oracle 数据库中各种对象的信息,包括表、索引、约束、序列、视图等等。使用 SQL 可以方便地查询数据字典视图,进而对数据库进行管理和优化。 以下是两个使用 SQL 查询 Oracle 数据字典视图的实例: 查询表的大小和行数 Oracle 数据字典视图中包含了表的大小和行数…

    database 2023年3月27日
    00
  • Yapi安装部署详细图文教程

    下面是一份“Yapi安装部署详细图文教程”的完整攻略,希望能给你带来帮助。 Yapi是什么? Yapi是一个开源的、可定制的、高效的、灵活的接口管理平台。 准备工作 在开始安装Yapi之前,你需要满足以下几个前提条件: 安装了node.js 安装了MongoDB 一份Yapi的安装包 安装步骤 第一步:下载并解压Yapi安装包 首先,你需要从Github上下…

    database 2023年5月22日
    00
  • alibaba seata服务端具体实现

    下面我将为您详细讲解“alibaba seata服务端具体实现”的完整攻略。 什么是alibaba seata Alibaba Seata是一款开源的分布式事务解决方案,旨在提供高性能和简单易用的分布式事务解决方案,并支持多种数据库以及RPC框架。它也是阿里巴巴全局使用的分布式事务解决方案。 alibaba seata服务端具体实现 1. 下载和安装alib…

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部