李锋镝的博客

  • 首页
  • 时间轴
  • 说说
  • 读书观影
  • 系列
  • AI工具集
  • 论坛
  • 友圈
    • 友链
    • 朋友圈
    • 游客中心
  • 留言
    • 留言
    • 走心评论
  • 关于
    • 关于本站
    • Now
    • 每日心情
    • 网站地图
    • 网站统计
    • 赞助
  • 星球穿梭
  • 🚇开往
静亦定 动亦定
惟坚韧者始能遂其志
  1. 首页
  2. 原创
  3. 正文

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

2025年4月24日 257 1 0
本文最后更新于 2025年4月24日,距今已 561 天,其中的信息可能已经发生变化,请注意甄别。

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);
            }
        }
    }
}
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
分享到

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

也可使用浏览器菜单中的「分享」功能

微信扫一扫分享

标签: JAVA MyBatis MyBatis Plus MyBatis Plus Join MySQL 数据库 联表查询
最后更新:2025年4月24日

岁月同一天 11 月 6 日

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

  • AI
    1 年前 2025年11月6日
    AI能写代码,却造不出软件:软件工程的核心竞争力从未改变

    “我用AI拼了个Demo,就差上线了,能帮我变成产品吗?” 最近越来越多非技术从业者带着这样的需求找上门——他们可能是律…

  • 代码人生
    1 年前 2025年11月6日
    西蒙学习法实战指南:6个月攻克新领域,从入门到能用的高效路径

    作为IT从业者,我们每天都面临新技术的冲击——今天是AI大模型,明天是云原生,后天是低代码开发。有限的时间与无限的学习需…

  • AI
    1 年前 2025年11月6日
    从Token到计费:大模型背后的文本编码逻辑与商业本质

    你是否有过这样的困惑?——给大模型发一段500字的中文需求,却被扣除了800多个Token;同样一篇文章,在GPT-4中…

  • 6 年前 2020年11月6日
    8条经验轻松上手IDEA插件开发

    IDEA作为我们(后端Java开发者)必不可少的IDE,以其智能的代码提示、多样的框架支持、简洁的开发界面等特性,被业界…

  • 其他
    7 年前 2019年11月6日
    架构师究竟比高级开发厉害在哪?

    目前我在互联网公司里干了1年多,接触了多位技术和业务的架构师,由于我正在升级到架构师,所以能直观地感受到高级开发和架构的…

  • 转载
    7 年前 2019年11月6日
    如何在面试中介绍自己的项目经验

    在面试时,经过寒暄后,一般面试官会让介绍项目经验 。常见的问法是,说下你最近的(或最拿得出手的)一个项目。 根据我们的面…

相关文章
  • Java之五种遍历Map集合的方式2021年2月19日
  • maven依赖本地jar包2025年3月28日
  • 使用AbstractRoutingDataSource动态切换数据源2025年3月15日
  • 从SQL规范性检查、表结构索引检查着手分析如何优化SQL2021年3月3日
  • SpringBoot 中内置的 49 个常用工具类2025年5月26日

李锋镝

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

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

文章评论

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

待到重阳日,还来就菊花。

听点儿音乐吧 朋友~
文章目录
最新 热点 随机
最新 热点 随机
给服务器加了WAF 又一个逆天改命的人:小小徐 AI的生成能力等于生产力吗? NGINX严重漏洞(CVE-2026-15176、CVE-2026-93479、CVE-2026-97205) Kratos-plus v1.1.27更新说明 php2shell远程执行漏洞修复(CVE-2026-109618 和 CVE-2026-109619)
给主题增加了游客中心功能心气没了,干什么都不得劲我觉得是时候公布我的导航网站了给服务器加了WAF游本昌去世关于主题加载速度优化的一点儿小演进
阿里巴巴的26款超神Java开源项目 StarUML4.0破解文件 微服务架构梳理总结(二) SpringBoot 中内置的 49 个常用工具类 Java中的变量和数据类型 Markdown常用语法
最近评论
fairy 发布于 10 分钟前(11月06日) 机器人快来我这里吧!
李锋镝 发布于 15 分钟前(11月06日) 都是机器人,防不住
李锋镝 发布于 15 分钟前(11月06日) 是的,太烦了
李锋镝 发布于 16 分钟前(11月06日) 可以同一台服务器
fairy 发布于 2 小时前(11月06日) 这流量,好厉害啊。我一年都没那么多
标签聚合
IDEA MySQL Redis SpringBoot Claude 数据库 K8s AI JAVA JVM 多线程 架构 日常 SQL Spring AI编程 分布式 ElasticSearch WordPress Theme
友情链接
  • 林羽凡
  • 搬砖日记
  • 九仞之行
  • 韩小韩博客
  • Mr.Sun的博客
  • Honesty
  • 老张博客
  • 知向前端
  • lijie blog
  • 志文工作室
  • 彬红茶日记
  • 懋和道人
  • sssr7844的博客
  • Serendipity
  • 哥斯拉
  • 瓦匠个人小站
  • 韩情脉脉
  • 刘永博客
  • 皮皮社

COPYRIGHT © 2016-2026 lifengdi.com. ALL RIGHTS RESERVED.

lifengdi.com 十年之约虫洞

Domain age badge for lifengdi.com

Theme Kratos-plus By Dylan Li

津ICP备2024022503号-3

京公网安备11011502039375号