李锋镝的博客

  • 首页
  • 时间轴
  • 留言
  • 插件
  • 左邻右舍
  • 我的日常
  • 关于我
    • 关于我
    • 另一个网站
  • 知识库
  • 赞助
Destiny
自是人生长恨水长东
  1. 首页
  2. 原创
  3. 正文

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

2025年4月24日 106点热度 1人点赞 0条评论

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/archives/article/4328

相关文章

  • 分布式服务生成唯一不重复ID(24位字符串)
  • Hibernate、MyBatis的简介、区别以及优化
  • Java中PO、VO、BO、DTO、POJO、DAO释义
  • MySQL语法总结
  • Spring中的Aware接口
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: JAVA MyBatis MyBatis Plus MyBatis Plus Join MySQL 数据库 联表查询
最后更新:2025年4月24日

李锋镝

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

打赏 点赞
< 上一篇
下一篇 >

文章评论

1 2 3 4 5 6 7 8 9 11 12 13 14 15 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 46 47 48 49 50 51 52 53 54 55 57 58 60 61 62 63 64 65 66 67 69 72 74 76 77 78 79 80 81 82 85 86 87 90 92 93 94 95 96 97 98 99
取消回复

COPYRIGHT © 2025 lifengdi.com. ALL RIGHTS RESERVED.

Theme Kratos Made By Dylan

津ICP备2024022503号-3