首页 > 其他分享 >MyBatis-Plus 多表联查Mybatis-Plus Join

MyBatis-Plus 多表联查Mybatis-Plus Join

时间:2024-10-14 15:49:27浏览次数:11  
标签:多表 private 查询 MyBatis Plus Mybatis com class

com.github.yulichang Mybatis-Plus Join 简介

在 MyBatis-Plus 中,使用 com.github.yulichang 提供的扩展库(Mybatis-Plus Join),可以非常方便地实现多表联表查询,而不需要手动编写复杂的 SQL。这种扩展库简化了联表操作,提供了一种基于 Lambda 表达式的查询方式。
MyBatis-Plus-Join (opens new window)(简称 MPJ)是一个 MyBatis-Plus (opens new window)的增强工具,在 MyBatis-Plus 的基础上只做增强不做改变,为简化开发、提高效率而生。
该扩展库通过 MyBatis-Plus 的 Wrapper 和 Mapper 扩展支持 JOIN 操作,允许你在查询时使用类似 MyBatis-Plus 的链式查询语法完成多表关联查询。
特性
无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
无感引入, 支持MP风格的查询, 您会MP就会MPJ, 无需额外的学习成本
兼容MP的别名、逻辑删除、枚举列、TypeHandle列等特性
支持注解形式一对一、一对多和连表查询形式的一对一和一对多
com.github.yulichang 的 MyBatis-Plus Join 库简化了多表联表查询,让你可以通过 Lambda 表达式和链式操作编写复杂的查询逻辑,提升了代码的可读性和维护性。如果你需要多表关联查询,MyBatis-Plus Join 是一个非常强大的工具。

快速上手

  1. 添加依赖
    在你的 Maven 项目中,添加以下依赖:
<dependency>
    <groupId>com.github.yulichang</groupId>
    <artifactId>mybatis-plus-join</artifactId>
    <version>1.4.5</version>
</dependency>
  1. 数据库表结构示例
    假设我们有两个表:
    ● user 表:用户表
    ● order 表:订单表,关联用户 ID
CREATE TABLE user (
    id BIGINT PRIMARY KEY,
    name VARCHAR(50),
    age INT
);

CREATE TABLE orders (
    id BIGINT PRIMARY KEY,
    user_id BIGINT,
    order_number VARCHAR(50),
    total_amount DECIMAL(10, 2),
    FOREIGN KEY (user_id) REFERENCES user(id)
);
  1. 实体类定义
    定义两个实体类:
@Data
public class User {
    private Long id;
    private String name;
    private Integer age;
}

@Data
public class Order {
    private Long id;
    private Long userId;
    private String orderNumber;
    private BigDecimal totalAmount;
}
  1. 使用 Mybatis-Plus Join 进行多表查询
    方法一:JoinLambdaQueryWrapper
    你可以使用 JoinLambdaQueryWrapper 来构建多表联表查询的条件。例如,我们想要查询每个订单的用户信息,可以这样写:
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.github.yulichang.toolkit.MPJQueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;

public class OrderService {
    
    @Autowired
    private OrderMapper orderMapper;

    public List<UserOrderDTO> getOrderWithUser() {
        MPJLambdaWrapper<Order> wrapper = new MPJLambdaWrapper<>();
        wrapper.selectAll(Order.class)        // 查询 Order 表所有字段
               .select(User::getName)         // 查询 User 表的 Name 字段
               .leftJoin(User.class, User::getId, Order::getUserId);  // 使用 left join 连接

        return orderMapper.selectJoinList(UserOrderDTO.class, wrapper);
    }
}

方法二:自定义 DTO 返回结果
创建 UserOrderDTO 类,用于存放查询结果。

@Data
public class UserOrderDTO {
    private Long id;
    private String name;
    private String orderNumber;
    private BigDecimal totalAmount;
}
然后在查询中返回 UserOrderDTO。
public List<UserOrderDTO> getOrderWithUserDTO() {
    MPJLambdaWrapper<Order> wrapper = new MPJLambdaWrapper<>();
    wrapper.select(Order::getId, Order::getOrderNumber, Order::getTotalAmount)
           .select(User::getName)
           .leftJoin(User.class, User::getId, Order::getUserId);

    return orderMapper.selectJoinList(UserOrderDTO.class, wrapper);
}
  1. Mapper 接口
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.github.yulichang.base.MPJBaseMapper;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface OrderMapper extends MPJBaseMapper<Order> {
}

通过 MPJBaseMapper 提供的 selectJoinList 方法,可以直接执行多表联表查询,并返回自定义的 DTO 对象。

标签:多表,private,查询,MyBatis,Plus,Mybatis,com,class
From: https://blog.csdn.net/Fireworkit/article/details/142920590

相关文章

  • mybatis分页查询,总数是对的,数据有重复
    mybatis分页查询,总数是对的,数据有重复在使用MyBatis查询数据时,ORDERBY子句的使用会直接影响到查询结果的顺序。虽然在某些情况下,数据库返回的记录顺序可能看起来是相同的,但实际上没有使用ORDERBY时,返回的顺序是不可预测的,这取决于数据库的内部实现和数据存储的方式。可......
  • mybatis入门案例-传参类型和方式
    mybatis传参类型和方式主要分享一下mybatis的mapper接口参数类型和传参方式,适用于初学者。直接上代码:pom.xml文件<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-insta......
  • SpringBoot&Mybatis的苏果超市商品销售管理系统 毕业设计源码93704
                            摘 要在网络信息的时代,众多的软件被开发出来,给用户带来了很大的选择余地,而且人们越来越追求更个性的需求。在这种时代背景下,超市只能以用户为导向,按品种小批量组织生产,以产品的持续创新作为超市最......
  • Java面试题———MyBatis篇
    目录1、Mybatis中#{}和${}的区别2、当实体类中的属性名和表中的字段名不一样,怎么办3、MyBatis动态SQL了解吗4、ResultType和ResultMap有什么区别1、Mybatis中#{}和${}的区别在Mybatis中#{}和${}都可以用于在sql语句中拼接参数,但是在使用方面有很多的区别1、处理方式......
  • Springboot整合Mybatis
    1、创建springboot项目2、勾选mysql驱动和web驱动3、pom.xml导入相关依赖<!--MyBatisPlus启动器--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId>&l......
  • Mybatis基础操作
    完成员工信息的增删改查操作。准备--部门管理createtabledept(idintunsignedprimarykeyauto_incrementcomment'主键ID',namevarchar(10)notnulluniquecomment'部门名称',create_timedatetimenotnullcomment'创建时间',update_time......
  • Mybatis高级查询-一对多查询
    表介绍和表关系说明新建以下4张表tb_user:用户表tb_order:订单表tb_item:商品表tb_orderdetail:订单详情表【表关系】1.tb_user和tb_order表关系tb_user《==》tb_order:一对多,一个人可以下多个订单tb_order《==》tb_user:一对一,一个订单只能属于一个人......
  • 基于django+vue+Vue基于+Mybatis的医生在线诊所平台【开题报告+程序+论文】-计算机毕
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,医疗行业也迎来了数字化转型的浪潮。传统的就医模式面临着诸多挑战,如医疗资源分配不均、患者就医体验不佳、医生......
  • OPPO「玩游戏时间最久」手机OPPO K12 Plus 发布,双11到手价1799元起
    在智能手机市场日新月异的今天,OPPO再次以技术创新引领潮流,于10月12日正式发布了其K系列的最新力作——OPPOK12Plus。这款手机的问世,不仅标志着OPPO在续航、性能以及用户体验上的全面升阶,更是为消费者带来了一场关于科技与生活的美好邂逅。OPPOK12Plus将于10月12日15:30开启......
  • Mybatis-Flex的增、删、改、查以及swagger (knife4J)的使用
    现代Java开发中,Mybatis-Flex是一个功能强大的Java持久层框架,使数据库操作高效灵活,而Swagger(Knife4J)则改善了API文档化与测试体验,两者结合能提高效率、增强协作、保证代码质量。本文将详细描述Mybatis-Flex增、删、改、查操作及与Swagger(Knife4J)协同使用,以下均已C......