• Mybatis-plus-join初体验


    前言

    大家用mybatis plus时,应该知道它不支持多表查询功能吧,
    最近发现大牛,搞了个升级款Mybatis-plus-join来了,在Mybatis-plus基础上增加了联表查询功能,真香哈。

    Mybatis-plus-join简介

    支持连表查询的mybatis-plus,
    mybatis-plus风格的连表操作提供 wrapper.leftJoin() wrapper.rightJoin()等操作。
    当前最新版:1.2.4

    官方源码

    码云:https://gitee.com/best_handsome/mybatis-plus-join
    gitHub: https://github.com/yulichang/mybatis-plus-join

    使用要求

    注意: mybatis plus version >= 3.4.0

    安装

    添加依赖

    <dependency>
        <groupId>com.github.yulichanggroupId>
        <artifactId>mybatis-plus-joinartifactId>
        
        <version>1.2.1version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    使用

    mapper继承MPJBaseMapper (必选)
    service继承MPJBaseService (可选)
    serviceImpl继承MPJBaseServiceImpl (可选)

    核心类 MPJLambdaWrapper和MPJQueryWrapper

    MPJLambdaWrapper用法
    简单的三表查询

    class test {
        @Resource
        private UserMapper userMapper;
    
        void testJoin() {
            List<UserDTO> list = userMapper.selectJoinList(UserDTO.class,
                    new MPJLambdaWrapper<UserDO>()
                            .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));
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    对应sql

    SELECT 
        t.id,
        t.name,
        t.sex,
        t.head_img,
        t1.tel,
        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 > ?)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    说明

    UserDTO.class 查询结果返回类(resultType)
    selectAll() 查询指定实体类的全部字段
    select() 查询指定的字段,支持可变参数,同一个select只能查询相同表的字段
    故将UserAddressDO和AreaDO分开为两个select()
    selectAs() 字段别名查询,用于数据库字段与业务实体类属性名不一致时使用
    leftJoin() 参数说明
    第一个参数: 参与连表的实体类class
    第二个参数: 连表的ON字段,这个属性必须是第一个参数实体类的属性
    第三个参数: 参与连表的ON的另一个实体类属性
    默认主表别名是t,其他的表别名以先后调用的顺序使用t1,t2,t3…
    条件查询,可以查询主表以及参与连接的所有表的字段,全部调用mp原生的方法,正常使用没有sql注入风险。

    其他功能文档,参考官网的wikis :https://gitee.com/best_handsome/mybatis-plus-join/wikis/

    感谢

    如果您认为这篇文章还不错或者有所收获,您可以点击右下角的【点赞】支持,或请我喝杯咖啡【赞赏】,这将是我继续写作,分享的最大动力!
    作者:勤快的小蚂蚁
    声明:原创博客请在转载时保留原文链接或者在文章开头加上本人博客地址,如发现错误,欢迎批评指正。凡是转载于本人的文章,不能设置打赏功能,如有特殊需求请与本人联系!
    ————————————————
    版权声明:本文为CSDN博主「勤快的小蚂蚁」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/fxzzq/article/details/126079420

  • 相关阅读:
    聊聊「低代码」的实践之路
    三维模型3DTile格式轻量化的纹理压缩和质量关系分析
    C# Rectangle基本用法和图片切割
    力扣--N皇后
    gin-基础笔记
    R语言编写switch函数进行多分支选择、判断编程:使用switch函数在多种方案中进行选择
    深度学习 Day 16——利用卷神经网络实现咖啡豆的识别
    【微信小程序】获取用户手机号的实现
    哈希的使用
    科技赋能,创新发展!英码科技受邀参加2023中国创新创业成果交易会
  • 原文地址:https://blog.csdn.net/fxzzq/article/details/126079420