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日

相关文章

  • 详解Linux中的日志及用日志来排查错误的方法

    详解Linux中的日志及用日志来排查错误的方法 在Linux系统中,日志是一个非常重要的组成部分,它记录了系统中几乎所有的事件。通过仔细阅读和分析日志文件,可以帮助我们诊断和解决系统中的各种问题。下面是详细讲解Linux中的日志及用日志来排查错误的方法的攻略。 1. 日志的种类和位置 在大多数Linux系统中,日志的种类和位置都是相似的。以下是一些常见的日志…

    database 2023年5月21日
    00
  • SQL 计算行数

    下面是SQL计算行数的攻略以及两个实例。 什么是SQL计算行数 SQL计算行数是指在数据库中进行数据查询时,我们可以使用SQL内置的函数COUNT()计算满足条件的记录数量,也就是行数。这个功能在实际开发中非常实用,可以帮助我们快速得到某个查询条件下的记录总数。 COUNT()函数使用方法 COUNT()函数是SQL中非常常用的一个聚合函数,主要用于计算满足…

    database 2023年3月27日
    00
  • MySQL中时间函数操作大全

    MySQL中时间函数操作大全 MySQL中提供了丰富的时间函数,可以对日期和时间进行各种常见的操作,比如取得日期中的年、月、日,计算日期之间的差值,将时间戳转换为时间字符串等。下面就一一列举这些时间函数及其用法,方便大家在实际开发中快速使用。 YEAR(date) 函数返回日期date的年份部分。 示例: SELECT YEAR(‘2018-08-16’);…

    database 2023年5月22日
    00
  • MySQ登录提示ERROR 1045 (28000)错误的解决方法

    当使用MySQL登录时,可能会遇到错误提示ERROR 1045 (28000),这通常是因为用户名或密码不正确而导致的,也有可能是权限问题所致。下面是解决方法的完整攻略。 1. 确认用户名和密码 首先,请确认你输入的用户名和密码是否正确。如果你不确定自己的用户名和密码是否正确,可以尝试使用以下命令测试登录: mysql -u username -p 其中,-…

    database 2023年5月18日
    00
  • springboot+mybatis+druid+sqlite/mysql/oracle

    搭建springboot+mybatis+druid+sqlite/mysql/oracle附带测试   1.版本 springboot2.1.6 jdk1.8 2.最简springboot环境 https://www.cnblogs.com/SmilingEye/p/11422536.html 3.pom(sqlite配置) spring-boot-sta…

    MySQL 2023年4月12日
    00
  • Android数据库中事务操作方法之银行转账示例

    我来详细讲解一下“Android数据库中事务操作方法之银行转账示例”的完整攻略。 什么是数据库事务 在数据库操作中,一个事务是指由一连串的操作序列组成的一个不可分割的工作单元,这个工作单元内的所有操作要么全部成功完成,要么全部回滚失败。在这个工作单元中,每一个操作都必须满足ACID规则,即原子性(Atomicity)、一致性(Consistency)、隔离性…

    database 2023年5月21日
    00
  • SQL中表锁定(LOCK、UNLOCK)的具体使用

    SQL中的表锁定可以通过LOCK和UNLOCK语句实现,这可以保证在操作表的过程中并发执行的安全性。 LOCK和UNLOCK语句简介 LOCK语句 LOCK语句可以锁定指定的表,包括读锁和写锁(也称共享锁和排它锁)。 根据应用场景不同,可以使用以下两种方式: LOCK TABLE tablename READ:对指定表加读锁,可以允许其他事务通过SELECT…

    database 2023年5月22日
    00
  • SQL Server 数据库的更改默认备份目录的详细步骤

    要更改 SQL Server 数据库的默认备份目录,可以按照以下步骤进行操作: 首先,在 SQL Server Management Studio 中连接到您要更改备份目录的 SQL Server 实例中; 在“对象资源管理器”窗口中选择“服务器对象”节点,并右键单击该节点; 选择“属性”选项,打开“服务器属性”对话框; 在左侧“选择页面”列表中,选择“数据…

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