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

yizhihongxing

下面是详细讲解“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日

相关文章

  • SQL 查找Null值

    SQL中查找NULL值是一项常见的操作,以下是SQL查找NULL值的完整攻略,包含两条实例: 1. 使用IS NULL或IS NOT NULL操作符 在SQL中,可以使用IS NULL或IS NOT NULL操作符查找NULL值或非NULL值。 IS NULL:查找某一列中为NULL的记录。 sqlSELECT * FROM table_name WHERE…

    database 2023年3月27日
    00
  • Linux高级篇学习手册(二)

    针对题目中提到的Linux高级篇学习手册(二),我将提供一个完整的学习攻略,帮助Linux爱好者更好地学习和掌握该书的内容。 一、准备工作 在开始之前,我们需要做以下准备工作。 1.1 确认学习环境 首先,需要确认自己的学习环境是否已经具备。比如,我们需要安装好Linux操作系统,对Linux基础知识已经有基本的了解。 1.2 确认学习时间 确定自己的学习时…

    database 2023年5月22日
    00
  • python 连接数据库mysql解压版安装配置及遇到问题

    Python 连接 MySQL 解压版安装配置及遇到问题 安装MySQL 首先需要先下载 MySQL,网址为 https://www.mysql.com/downloads/ 。 在页面中选择“MySQL Community Server”,下载并解压到本地。 安装Python 如果还未安装 Python,可以前往 https://www.python.or…

    database 2023年5月21日
    00
  • 一个ORACLE分页程序,挺实用的.

    下面是一个ORACLE分页程序的完整攻略: 什么是分页程序 在开发一个较大型的应用时,用户可能会从数据库中检索出大量数据。这些数据很难一次呈现出来,因为它们太多了。为了解决这个问题,就需要使用分页机制了。分页机制会将大量数据分成小块,每次只显示一部分数据,用户需要点击翻页按钮才能看到下一部分数据。这样分页机制就能很好地解决大量数据呈现的问题。 ORACLE分…

    database 2023年5月21日
    00
  • Redis常用命令整理

      Redis常见情景下的操作命令都在这里了,做个笔记便于以后查找。   一、基本操作命令   redis默认为 16个库 默认自动使用 0号库     1. 检测Redis服务运行是否正常      redis >ping #返回 PONG,表示redis服务运行正常     2.查看当前数据库中 key的数目:     dbsize     3. …

    Redis 2023年4月16日
    00
  • 经常用的DOS命令大全(经典收藏)

    经常用的DOS命令大全(经典收藏) 前言 DOS(Disk Operating System)是一种较为古老的操作系统,它的历经数十年的发展已经渐渐淡出我们的视野,但是在现在的Windows操作系统中仍然内置了大量的DOS命令,这些命令可以帮助我们更好地管理和使用计算机。 目录 本文将对常用的DOS命令进行介绍并提供相应的用法和示例。 以下是一些常用的DOS…

    database 2023年5月22日
    00
  • MongoDB支持的java数据类型和测试例子

    MongoDB 支持的 Java 数据类型与 Java 原生支持的数据类型相似,同时,MongoDB 内有部分自己的数据类型,下面详细介绍 MongoDB 支持的 Java 数据类型以及相关示例。 MongoDB 支持的 Java 原生数据类型 MongoDB 支持 Java 的原生数据类型,包括:整型、长整型、双精度浮点型、字符型、布尔型和日期型。这些类型…

    database 2023年5月21日
    00
  • Redis分布式锁这样用,有坑?

    分享一个在工作中,Redis分布式锁的坑,很多人都是这样用的 背景 在微服务项目中,大家都会去使用到分布式锁,一般也是使用Redis去实现,使用RedisTemplate、Redisson、RedisLockRegistry都行,公司的项目中,使用的是Redisson,一般你会怎么用?看看下面的代码,是不是就是你的写法 String lockKey = “f…

    Redis 2023年4月16日
    00
合作推广
合作推广
分享本页
返回顶部