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.yulichang</groupId>
    <artifactId>mybatis-plus-join</artifactId>
    <!-- 此版本号可能不是最新版,请自行确认 -->
    <version>1.2.1</version>
</dependency>

使用

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));
    }
}

对应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 > ?)

说明

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

猜你喜欢

转载自blog.csdn.net/fxzzq/article/details/126079420