李锋镝的博客

  • 首页
  • 时间轴
  • 说说
  • 每日心情
  • Now
  • 系列文章
  • AI工具集
  • 论坛
  • 左邻右舍
    • 左邻右舍
    • 朋友圈
    • 游客中心
  • 留言
    • 留言
    • 走心评论
  • 关于
    • 关于本站
    • 网站地图
    • 网站统计
    • 另一个网站
    • 赞助
  • 星球穿梭
  • 🚇开往
白雪成红
惟坚韧者始能遂其志
  1. 首页
  2. 原创
  3. 正文

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

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

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日
相关文章
  • TransmittableThreadLocal介绍与使用2025年6月3日
  • Java通用枚举还能这样做?前后端终于不扯皮了!2025年10月21日
  • SpringBoot整合MongoDB2022年9月2日
  • MySQL深度分页2022年2月11日
  • 千万级大表新增字段实战指南:告别锁表与业务中断2026年1月15日

李锋镝

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

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

文章评论

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

从此无心爱良夜,任他明月下西楼。

听点儿音乐吧 朋友~
文章目录
最新 热点 随机
最新 热点 随机
Kratos-plus v1.1.26版本更新说明 我觉得是时候公布我的导航网站了 代码是 AI 写的,生产事故谁背锅? 给主题增加了游客中心功能 祝大家中秋安康 游本昌去世
给主题增加了游客中心功能游本昌去世关于主题加载速度优化的一点儿小演进我觉得是时候公布我的导航网站了给主题增加了Now、每日心情、年度回顾、岁月同一天、随机漫步等功能WordPress缓存插件WP Fastest Cache、WP Rocket 、FlyingPress对比
分布式锁-Zookeeper实现分布式锁 提示词工程终极指南:从入门到精通的全维度实战手册 一款节省token的利器:RTK(Rust Token Killer) 还不懂Redis?看完这个故事就明白了! 高性价比大模型部署实战:共绩算力 + QWEN-2.5-7B 从入门到生产全指南 任正非管理思想
最近评论
fairy 发布于 4 天前(10月02日) 很明显,只能处罚人,当然是人背锅。你能罚AI钱吗?能把AI辞退吗?很明显不能。
彬红茶 发布于 4 天前(10月02日) 很全面哦~国庆快乐
彬红茶 发布于 4 天前(10月01日) 确实可以加一下这个功能,我最近就改了,评论区加了个等级,游客中心实属无能为力 :78:
皮皮社长 发布于 5 天前(10月01日) 快看快看,我皮皮社长上榜了~ :2:
皮皮社长 发布于 5 天前(10月01日) 我直接把喜欢的网站放到友链中就好了,简单明了~ :40:
标签聚合
ElasticSearch 数据库 Claude MySQL 分布式 架构 Theme AI Spring AI编程 WordPress SpringBoot K8s SQL 多线程 Redis 日常 JAVA IDEA JVM
友情链接
  • 懋和道人
  • 瓦匠个人小站
  • 韩小韩博客
  • 蜗牛工作室
  • 哥斯拉
  • lijie blog
  • 林羽凡
  • Honesty
  • 九仞之行
  • Serendipity
  • 临窗旋墨
  • 若梦博客
  • 韩情脉脉
  • 彬红茶日记
  • 皮皮社
  • 志文工作室
  • Mr.Sun的博客
  • 老张博客
  • 知向前端
  • sssr7844的博客

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号