Mybatisplus连表查询指南

一、mybatisplus连表查询结果集封装

Mybatisplus通过使用@Entity注解来标识实体类的主表,使用@TableField注解来标识实体类中的外键关联字段,从而实现连表查询的结果集封装。例如:

@Entity
@Table(name = "user_info")
public class UserInfo {
    @TableId(type = IdType.ASSIGN_ID)
    private Long id;
    private String username;
    private String nickname;
    @TableField(exist = false)
    private List<Order> orders;
}

@Entity
@Table(name = "order")
public class Order {
    @TableId(type = IdType.ASSIGN_ID)
    private Long id;
    private String orderNo;
    private Double orderAmt;
    private Long userId;
}

在这里,UserInfo和Order是两个实体类,通过在UserInfo中使用@TableField(exist = false)注解来标识实体类中的外键关联字段,实现了与Order的多表关联查询。

二、mybatisPlus连表查询

在使用mybatisPlus进行多表关联查询时,可以使用Wrapper来构建查询条件,也可以自定义sql来实现查询。例如:

使用Wrapper构建查询条件:

QueryWrapper<UserInfo> wrapper = new QueryWrapper<>();
wrapper.eq("username", "test");
List<UserInfo> userInfoList = userInfoMapper.selectList(wrapper);

使用自定义sql语句查询:

@Select("SELECT * FROM user_info ui INNER JOIN order o ON ui.id = o.userid WHERE ui.username = #{username}")
List<UserInfo> selectUserInfoByUsername(@Param("username") String username);

三、mybatis查询表结构

使用mybatis-plus进行多表关联查询时,查询表结构非常重要,一般使用select *方式查询表结构。例如:

SELECT *
FROM information_schema.COLUMNS
WHERE TABLE_NAME = 'user_info'
UNION ALL
SELECT *
FROM information_schema.COLUMNS
WHERE TABLE_NAME = 'order';

四、mybatisplus多条件查询

使用mybatis-plus进行多条件查询时,可以使用Wrapper来构建查询条件,例如:

QueryWrapper<UserInfo> wrapper = new QueryWrapper<>();
wrapper.eq("username", "test")
        .ge("age", 18)
        .le("age", 30);
List<UserInfo> userInfoList = userInfoMapper.selectList(wrapper);

五、mybatisplus多表查询分页

使用mybatis-plus进行多表查询时,分页查询是非常常见和必要的。通过以下代码可以实现多表查询分页:

IPage<UserInfo> page = new Page<>(1, 10);
QueryWrapper<UserInfo> wrapper = new QueryWrapper<>();
wrapper.eq("username", "test");
IPage<UserInfo> userInfoIPage = userInfoMapper.selectPage(page, wrapper);

六、mybatisplus多表关联查询

使用mybatis-plus进行多表关联查询时,可以使用Wrapper来构建关联查询条件,例如:

QueryWrapper<UserInfo> wrapper = new QueryWrapper<>();
wrapper.eq("ui.username", "test")
        .eq("o.orderNo", "123456")
        .inSql("ui.id", "SELECT o.userId FROM order o WHERE o.orderNo = '123456'");

wrapper.select("ui.*", "o.*")
        .leftJoin("order o", "ui.id = o.userId");
List<UserInfo> userInfoList = userInfoMapper.selectList(wrapper);

七、mybatisplus联表查询

使用mybatis-plus进行联表查询时,可以通过在Wrapper中使用table()方法来指定需要联表查询的表,例如:

QueryWrapper<Order> wrapper = new QueryWrapper<>();
wrapper.select("o.*", "ui.nickname")
        .eq("o.orderNo", "123456")
        .eq("ui.username", "test")
        .table("order o")
        .leftJoin("user_info ui", "o.userId = ui.id");
List<Order> orderList = orderMapper.selectList(wrapper);

八、mybatisplus查询列表

使用mybatis-plus查询列表时,需要根据实际需求来选择使用Wrapper构建查询条件或是使用自定义sql语句查询。例如:

使用Wrapper构建查询条件:

QueryWrapper<UserInfo> wrapper = new QueryWrapper<>();
wrapper.eq("username", "test");
List<UserInfo> userInfoList = userInfoMapper.selectList(wrapper);

使用自定义sql语句查询:

@Select("SELECT * FROM user_info WHERE username = #{username}")
List<UserInfo> selectUserInfoByUsername(@Param("username") String username);

九、mybatisplus查询语句选取

使用mybatis-plus进行查询时,需要根据具体的业务需求来选择使用哪种查询语句,例如:

使用select x from table where y = ? and z = ?方式查询:

QueryWrapper<UserInfo> wrapper = new QueryWrapper<>();
wrapper.select("id", "username")
        .eq("username", "test")
        .eq("age", 20);
List<UserInfo> userInfoList = userInfoMapper.selectList(wrapper);

使用select * from table where y = ? and z = ?方式查询:

QueryWrapper<UserInfo> wrapper = new QueryWrapper<>();
wrapper.eq("username", "test")
        .eq("age", 20);
List<UserInfo> userInfoList = userInfoMapper.selectList(wrapper);

通过以上分析,我们可以看出,使用mybatisplus进行多表连表查询十分灵活和简单。同时,通过灵活的条件构建,可以满足不同类型的查询需求。希望此篇文章能为大家提供一些帮助。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/232466.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-11 12:52
下一篇 2024-12-11 12:52

相关推荐

  • Java JsonPath 效率优化指南

    本篇文章将深入探讨Java JsonPath的效率问题,并提供一些优化方案。 一、JsonPath 简介 JsonPath是一个可用于从JSON数据中获取信息的库。它提供了一种DS…

    编程 2025-04-29
  • 运维Python和GO应用实践指南

    本文将从多个角度详细阐述运维Python和GO的实际应用,包括监控、管理、自动化、部署、持续集成等方面。 一、监控 运维中的监控是保证系统稳定性的重要手段。Python和GO都有强…

    编程 2025-04-29
  • Python应用程序的全面指南

    Python是一种功能强大而简单易学的编程语言,适用于多种应用场景。本篇文章将从多个方面介绍Python如何应用于开发应用程序。 一、Web应用程序 目前,基于Python的Web…

    编程 2025-04-29
  • Python wordcloud入门指南

    如何在Python中使用wordcloud库生成文字云? 一、安装和导入wordcloud库 在使用wordcloud前,需要保证库已经安装并导入: !pip install wo…

    编程 2025-04-29
  • Python小波分解入门指南

    本文将介绍Python小波分解的概念、基本原理和实现方法,帮助初学者掌握相关技能。 一、小波变换概述 小波分解是一种广泛应用于数字信号处理和图像处理的方法,可以将信号分解成多个具有…

    编程 2025-04-29
  • Python字符转列表指南

    Python是一个极为流行的脚本语言,在数据处理、数据分析、人工智能等领域广泛应用。在很多场景下需要将字符串转换为列表,以便于操作和处理,本篇文章将从多个方面对Python字符转列…

    编程 2025-04-29
  • Python初学者指南:第一个Python程序安装步骤

    在本篇指南中,我们将通过以下方式来详细讲解第一个Python程序安装步骤: Python的安装和环境配置 在命令行中编写和运行第一个Python程序 使用IDE编写和运行第一个Py…

    编程 2025-04-29
  • FusionMaps应用指南

    FusionMaps是一款基于JavaScript和Flash的交互式地图可视化工具。它提供了一种简单易用的方式,将复杂的数据可视化为地图。本文将从基础的配置开始讲解,到如何定制和…

    编程 2025-04-29
  • Python起笔落笔全能开发指南

    Python起笔落笔是指在编写Python代码时的编写习惯。一个好的起笔落笔习惯可以提高代码的可读性、可维护性和可扩展性,本文将从多个方面进行详细阐述。 一、变量命名 变量命名是起…

    编程 2025-04-29
  • Python中文版下载官网的完整指南

    Python是一种广泛使用的编程语言,具有简洁、易读易写等特点。Python中文版下载官网是Python学习和使用过程中的重要资源,本文将从多个方面对Python中文版下载官网进行…

    编程 2025-04-29

发表回复

登录后才能评论