李锋镝的博客

  • 首页
  • 时间轴
  • 说说
  • 左邻右舍
  • 博友圈
  • 关于我
    • 关于我
    • 另一个网站
    • 我的导航站
    • 网站地图
    • 赞助
  • 留言
  • 走心评论
  • 系列文章
  • Now
  • 每日心情
  • 🚇开往
Destiny
自是人生长恨水长东
  1. 首页
  2. 原创
  3. 正文

mybatis-plus-join-boot-starter介绍及用法

2025年4月24日 约 1,116 字4 分钟 21点热度 1人点赞 0条评论
本文最后更新于 2025年4月24日,距今已 468 天,其中的信息可能已经发生变化,请注意甄别。

mybatis-plus-join-boot-starter是MyBatis - Plus的一个增强工具包,用于简化开发。

功能特点

  • 简化多表操作:它是MyBatis - Plus的扩展,让开发者能更便捷地进行多表关联查询、子查询等操作,通过简洁的API满足复杂查询需求。例如,在进行多表联合查询时,无需编写大量复杂的SQL语句或配置文件,只需简单配置和调用相关方法,即可实现多表数据的关联查询。
  • 支持多种特性:支持列枚举、别名、逻辑删除、TypeHandle、一对一、一对多等功能,还支持Lambda和字符串两种查询方式,以及自定义字段映射和结果转换、动态条件构造和链式调用等高级特性。比如,在进行数据查询时,可以根据不同的条件动态构造查询语句,灵活地实现各种复杂的查询逻辑。
  • 兼容性好:作为MyBatis - Plus的插件,它完全兼容MyBatis - Plus的使用习惯,引入后不会对现有工程产生影响,能与MyBatis - Plus原有功能无缝集成。

依赖配置

以Maven项目为例,在pom.xml文件中添加以下依赖即可使用:

<dependency>
    <groupId>com.github.yulichang</groupId>
    <artifactId>mybatis - plus - join - boot - starter</artifactId>
    <version>最新版本号</version>
</dependency>

最新版MyBatis-Plus-Join需要配合MyBatis-Plus 3.1.2及以上的版本使用。

代码示例

假设存在用户表user和订单表order,它们之间通过user_id关联,以下是使用mybatis-plus-join-boot-starter进行多表查询的示例:

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.yulichang.base.MPJBaseMapper;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.example.demo.entity.User;
import com.example.demo.entity.Order;
import org.springframework.stereotype.Repository;

import javax.annotation.Resource;
import java.util.List;

@Repository
public class UserRepository {

    @Resource
    private MPJBaseMapper<User> userMapper;

    public List<User> getUserWithOrders() {
        // 使用MPJLambdaWrapper进行多表查询
        MPJLambdaWrapper<User> wrapper = new MPJLambdaWrapper<User>()
               .selectAll(User.class)
               .select(Order::getOrderId, Order::getOrderName)
               .leftJoin(Order.class, Order::getUserId, User::getUserId);

        return userMapper.selectList(wrapper);
    }
}

在上述代码中,通过MPJLambdaWrapper进行多表关联查询,先选择User表的所有字段,再选择Order表的orderId和orderName字段,然后通过leftJoin方法进行左连接,指定连接条件是Order表的userId与User表的userId相等。最后通过userMapper.selectList(wrapper)执行查询,获取包含关联订单信息的用户列表。

完整示例:

以下是一个使用 mybatis-plus-join-boot-starter 进行多表关联查询的完整代码示例,假设我们有一个简单的业务场景:用户表 user 和订单表 order,用户可以有多个订单,我们要查询出每个用户及其对应的订单信息。

1. 引入依赖

在 pom.xml 文件中添加相关依赖:

<dependencies>
    <!-- Spring Boot 启动器 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <!-- MyBatis-Plus 启动器 -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>最新版本</version>
    </dependency>
    <!-- mybatis-plus-join-boot-starter -->
    <dependency>
        <groupId>com.github.yulichang</groupId>
        <artifactId>mybatis-plus-join-boot-starter</artifactId>
        <version>最新版本</version>
    </dependency>
    <!-- MySQL 驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
</dependencies>

请将 最新版本 替换为实际的最新版本号。

2. 配置数据源和 MyBatis-Plus

在 application.yml 文件中配置数据源和 MyBatis-Plus 相关信息:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/your_database?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
    username: your_username
    password: your_password
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis-plus:
  mapper-locations: classpath:/mapper/*.xml
  type-aliases-package: com.example.entity

将 your_database、your_username、your_password 替换为实际的数据库名称、用户名和密码。

3. 定义实体类

User 实体类:

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.io.Serializable;
import java.util.List;

@Data
@TableName("user")
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId
    private Long id;

    private String username;

    private String password;

    @TableField(exist = false)
    private List<Order> orders;
}

Order 实体类:

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.io.Serializable;

@Data
@TableName("order")
public class Order implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId
    private Long id;

    private Long userId;

    private String orderNo;

    private Double totalPrice;

    @TableField(exist = false)
    private User user;
}

4. 编写 Mapper 接口

UserMapper 接口:

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.github.yulichang.base.MPJBaseMapper;
import com.example.entity.User;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UserMapper extends BaseMapper<User>, MPJBaseMapper<User> {
}

OrderMapper 接口:

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.github.yulichang.base.MPJBaseMapper;
import com.example.entity.Order;
import org.apache.ibatis.annotations.Mapper;

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

5. 编写业务逻辑

在 UserService 中进行多表关联查询:

import com.baomidou.mybatisplus.core.conditions.query.MPJLambdaWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.entity.Order;
import com.example.entity.User;
import com.example.mapper.UserMapper;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService extends ServiceImpl<UserMapper, User> {

    public List<User> getUserWithOrders() {
        MPJLambdaWrapper<User> wrapper = new MPJLambdaWrapper<User>()
               .selectAll(User.class)
               .select(Order::getId, Order::getOrderNo, Order::getTotalPrice)
               .leftJoin(Order.class, Order::getUserId, User::getId);

        return baseMapper.selectList(wrapper);
    }
}

6. 测试代码

在测试类中调用业务方法进行测试:

import com.example.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
public class UserServiceTest {

    @Autowired
    private UserService userService;

    @Test
    public void testGetUserWithOrders() {
        List<User> userList = userService.getUserWithOrders();
        for (User user : userList) {
            System.out.println("用户: " + user.getUsername);
            for (Order order : user.getOrders()) {
                System.out.println("  订单号: " + order.getOrderNo + ", 总价: " + order.getTotalPrice);
            }
        }
    }
}
除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接

本文链接:https://www.lifengdi.com/article/4328

推荐阅读

  • Java中PO、VO、BO、DTO、POJO、DAO释义
  • SpringBoot常用注解
  • CompletableFuture使用详解
  • 金融级JVM深度调优实战的经验和技巧
  • SpringBoot 中内置的 49 个常用工具类
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: JAVA MyBatis MyBatis Plus MyBatis Plus Join MySQL 数据库 联表查询
最后更新:2025年4月24日

岁月同一天 8 月 6 日

回望过去的今天,你在写什么

  • 5 年前 2021年8月6日
    JMX监控权限认证配置

    JMX监控权限认证配置 JMX(Java Management Extensions,即Java管理扩展)是一个为应用程…

相关文章
  • Spring中@Autowired和@Resource的区别详解2021年1月15日
  • Java通用枚举还能这样做?前后端终于不扯皮了!2025年10月21日
  • 全网最全Shiro认证与授权原理分析2021年2月16日
  • Spring WebFlux深度解析:异步非阻塞架构与实战落地指南2025年12月15日
  • 深度解析多级缓存架构:从设计到落地,彻底解决数据一致性难题2025年11月4日

李锋镝

既然选择了远方,便只顾风雨兼程。

打赏 点赞
< 上一篇
下一篇 >
1234567891112131415161718192021222324252627282930313233343536373839404142434446474849505152535455575859606162636465666769727476777879808182858687909293949596979899
取消回复
…

文章评论

还没有评论,快来抢沙发吧~

遥知兄弟登高处,遍插茱萸少一人。

听点儿音乐吧 朋友~
文章目录
最新 热点 随机
最新 热点 随机
Claude Fable 5(claude-fable-5)深度详解 如何通过命令查看Java应用内存中对象数量 关于服务的探活端口和业务端口不一致有什么问题 记一次Apollo配置中心+Spring配置自动刷新导致的内存泄露问题 给主题增加了Now、每日心情、年度回顾、岁月同一天、随机漫步等功能 增加了两套复古皮肤-牛皮纸、千禧网页
AI时代,个人技术博客的出路在哪里?增加了两套复古皮肤-牛皮纸、千禧网页给主题增加了Now、每日心情、年度回顾、岁月同一天、随机漫步等功能这个域名注册整整十年了,十年时间,真快啊WordPress实现用户评论等级排行榜插件WordPress网站换了个字体,差点儿把样式换崩了
网站升级到http/2 Dapr 知多少 | 分布式应用运行时 jasypt-spring-boot 使用说明 Spring中的Aware接口 在 Visual Studio 中生成和清理项目和解决方案 Windows版 妹妹的画【2019.10.31】
最近评论
李锋镝 发布于 16 小时前(08月05日) 擅长哪个用哪个
九仞 发布于 16 小时前(08月05日) 列出所有模型的 json 数据处理居然用 python 嘛 , 感觉用 jq 更方便, jq -r ...
李锋镝 发布于 19 小时前(08月05日) hahaha,好听的歌可以推荐一下,不定期更新歌单
林羽凡 发布于 21 小时前(08月05日) 哎呀我天,我点了右侧的奢香夫人,突然感觉有一种进抖音的感觉。
李锋镝 发布于 5 天前(08月01日) 删了,哈哈哈,已经把这个机场关键字加黑名单了
标签聚合
设计模式 SQL Redis JAVA AI编程 JVM 分布式 MySQL 日常 Claude 多线程 WordPress K8s SpringBoot ElasticSearch 架构 AI 数据库 Spring IDEA
友情链接
  • 搬砖日记
  • 拾趣博客导航
  • Mr.Sun的博客
  • 韩情脉脉
  • 林羽凡
  • 皮皮社
  • Blogs·CN
  • 临窗旋墨
  • 志文工作室
  • 老张博客
  • 韩小韩博客
  • 彬红茶日记
  • 瓦匠个人小站
  • 风渡言
  • 哥斯拉
  • Honesty
  • 懋和道人
  • 旧时繁华
  • 知向前端

COPYRIGHT © 2026 lifengdi.com. ALL RIGHTS RESERVED.

正在博友圈履约中

域名年龄

Theme Kratos+ By Dylan Li

津ICP备2024022503号-3

京公网安备11011502039375号