博客
关于我
MyBatis-Plus 还手写 Join 联表查询?一个依赖轻松搞定,真香!
阅读量:798 次
发布时间:2023-02-09

本文共 3633 字,大约阅读时间需要 12 分钟。

MyBatis-Plus Join 联表查询:一个依赖轻松搞定,真香!

众所周知,Mybatis Plus 封装的 mapper 不支持 join,如果需要支持就必须自己去实现。然而,对于大部分的业务场景来说,多表 join 是必不可少的,否则就没什么意义。

那么,有没有一种不通过硬 SQL 的形式,通过框架提供 join 功能呢?答案是肯定的。


安装

为了使用这个插件,你需要先在项目中添加相应的依赖。

Maven

com.github.yulichang
mybatis-plus-join-boot-starter
1.4.4

Gradle

implementation 'com.github.yulichang:mybatis-plus-join-boot-starter:1.4.4'

或者,直接 clone 代码到本地,执行 mvn install,然后引入以上依赖。

注意:Mybatis Plus 版本需要大于等于 3.4.0。


使用

  • Mapper 类继承 MPJBaseMapper(必选)
  • Service 类继承 MPJBaseService(可选)
  • ServiceImpl 类继承 MPJBaseServiceImpl(可选)

  • 核心类:MPJLambdaWrapper 和 MPJQueryWrapper

    MPJLambdaWrapper 用法

    简单的三表查询

    class Test {
    @Resource
    private UserMapper userMapper;
    void testJoin() {
    MPJLambdaWrapper
    wrapper = new MPJLambdaWrapper<>()
    .selectAll(UserDO.class)
    .select(UserAddressDO::getTel)
    .selectAs(UserAddressDO::getAddress, UserDTO::getUserAddress)
    .select(AreaDO::getProvince, AreaDO::getCity)
    .leftJoin(UserAddressDO.class, UserAddressDO::getUserId, UserDO::getId)
    .leftJoin(AreaDO.class, AreaDO::getId, UserAddressDO::getAreaId)
    .eq(UserDO::getId, 1)
    .like(UserAddressDO::getTel, "1")
    .gt(UserDO::getId, 5);
    List
    list = userMapper.selectJoinList(UserDTO.class, wrapper);
    }
    }

    对应 SQL

    SELECT 
    t.id, t.name, t.sex, t.head_img,
    t1.tel AS userTel,
    t1.address AS userAddress,
    t2.province,
    t2.city
    FROM
    user t
    LEFT JOIN user_address t1 ON t1.user_id = t.id
    LEFT JOIN area t2 ON t2.id = t1.area_id
    WHERE
    t.id = ?
    AND t1.tel LIKE ?
    AND t.id > ?

    MPJLambdaWrapper 其他功能

    • 一对一、一对多 使用
    • 简单的 SQL 函数 使用(如上述示例)
    • ON 语句多条件 支持
    • ResultMap 等效 支持

    String 形式用法(MPJQueryWrapper)

    简单的连表查询

    class Test {
    @Resource
    private UserMapper userMapper;
    void testJoin() {
    MPJQueryWrapper wrapper = new MPJQueryWrapper()
    .selectAll(UserDO.class)
    .select("addr.tel", "addr.address", "a.province")
    .leftJoin("user_address addr on t.id = addr.user_id")
    .rightJoin("area a on addr.area_id = a.id")
    .like("addr.tel", "1")
    .le("a.province", "1");
    List
    list = userMapper.selectJoinList(UserDTO.class, wrapper);
    }
    }

    对应 SQL

    SELECT 
    t.id, t.name, t.sex, t.head_img,
    addr.tel,
    addr.address,
    a.province
    FROM
    user t
    LEFT JOIN user_address addr ON t.id = addr.user_id
    RIGHT JOIN area a ON addr.area_id = a.id
    WHERE
    addr.tel LIKE ?
    AND a.province <= ?

    高级用法

    class Test {
    @Resource
    private UserMapper userMapper;
    void testJoin() {
    List
    list = userMapper.selectJoinList(UserDTO.class, new MPJQueryWrapper()
    .selectAll(UserDO.class)
    .select("addr.tel", "addr.address")
    .select("CASE t.sex WHEN '男' THEN '1' ELSE '0' END AS sex")
    .select("sum(a.province) AS province")
    .leftJoin("(select * from user_address) addr on t.id = addr.user_id")
    .rightJoin("area a on addr.area_id = a.id")
    .like("addr.tel", "1")
    .le("a.province", "1")
    .orderByDesc("addr.id"));
    }
    }

    对应 SQL

    SELECT 
    t.id, t.name, t.sex, t.head_img,
    addr.tel,
    addr.address,
    CASE t.sex WHEN '男' THEN '1' ELSE '0' END AS sex,
    sum(a.province) AS province
    FROM
    user t
    LEFT JOIN (select * from user_address) addr ON t.id = addr.user_id
    RIGHT JOIN area a ON addr.area_id = a.id
    WHERE
    addr.tel LIKE ?
    AND a.province <= ?
    ORDER BY
    addr.id DESC

    通过以上方法,我们可以像使用 Mybatis Plus 一样轻松进行表关联操作!

    转载地址:http://ryffk.baihongyu.com/

    你可能感兴趣的文章
    MongoDB性能调优
    查看>>
    MongoDB插入数据的3种方法
    查看>>
    mongoDB教程(一):数据库简介
    查看>>
    mongoDB教程(七):集合的操作
    查看>>
    mongoDB教程(三):服务开启关闭
    查看>>
    mongoDB教程(九):可视化管理工具
    查看>>
    mongoDB教程(二):下载安装
    查看>>
    mongoDB教程(五):命名规范
    查看>>
    mongoDB教程(八):管理账户
    查看>>
    mongoDB教程(六):库的添加、查看、选择、删除
    查看>>
    mongoDB教程(十一):文档的操作
    查看>>
    mongoDB教程(十三):索引
    查看>>
    mongoDB教程(十二):分页操作
    查看>>
    mongoDB教程(十四):监控工具(11个)
    查看>>
    mongoDB教程(十):导入、导出
    查看>>
    mongoDB教程(四):用户角色
    查看>>
    MongoDB数据库/集合/文档基本操作
    查看>>
    MongoDB数据库安装与连接
    查看>>
    mongodb数据库操作--备份 还原 导出 导入
    查看>>
    MongoDB数据库操作详解:基础篇
    查看>>