• mybatis-plus-join


    参考: https://gitee.com/best_handsome/mybatis-plus-join/wikis/%E5%AE%89%E8%A3%85

    方法一

    添加依赖

    
        com.github.yulichang
        mybatis-plus-join
        
        1.3.3
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    方法二
    clone代码到本地,执行mvn install,添加依赖

    
        com.github.yulichang
        mybatis-plus-join
        
        1.3.3
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    使用

    mapper继承MPJBaseMapper
    @Mapper
    public interface UserMapper extends MPJBaseMapper {
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    (可选)service继承MPJBaseService
    public interface UserService extends MPJBaseService {
    
    }
    
    • 1
    • 2
    • 3
    • 4
    (可选)serviceImpl继承MPJBaseServiceImpl
    @Service
    public class UserServiceImpl extends MPJBaseServiceImpl implements UserService {
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    selectCount

    连表查询返回记录总数

    MPJQueryWrapper
    class MpJoinTest {
        @Resource
        private UserMapper userMapper;
    
        @Test
        void joinTest() {
            Integer count = userMapper.selectJoinCount(new MPJQueryWrapper()
                    .leftJoin("user_address addr on addr.user_id = t.id")
                    .eq("t.id", 2));
            System.out.println(count);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    对应sql

    SELECT COUNT( * ) FROM user t LEFT JOIN user_address addr on addr.user_id = t.id WHERE (t.id = ?)
    
    • 1

    如果要执行count(id),可以调用select()系列的方法,但是只能有一个字段

    class MpJoinTest {
        @Resource
        private UserMapper userMapper;
    
        @Test
        void joinTest() {
            Integer count = userMapper.selectJoinCount(new MPJQueryWrapper()
                    .select("t.id")
                    .leftJoin("user_address addr on addr.user_id = t.id")
                    .eq("t.id", 2));
            System.out.println(count);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    对应sql

    SELECT COUNT( t.id ) FROM user t LEFT JOIN user_address addr on addr.user_id = t.id WHERE 
    
    • 1
    (t.id = ?)
    MPJLambdaWrapper
    class MpJoinTest {
        @Resource
        private UserMapper userMapper;
    
        @Test
        void joinTest() {
            Integer count = userMapper.selectJoinCount(new MPJLambdaWrapper<>()
                    .leftJoin(UserAddressDO.class, UserAddressDO::getUserId, UserDO::getId)
                    .eq(UserDO::getId, 2));
            System.out.println(count);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    对应sql

    SELECT COUNT( * ) FROM user t LEFT JOIN user_address t1 ON (t1.user_id = t.id) WHERE (t.id = ?)
    
    • 1

    如果要执行count(id),可以调用select()系列的方法,但是只能有一个字段

    class MpJoinTest {
        @Resource
        private UserMapper userMapper;
    
        @Test
        void joinTest1() {
            Integer count = userMapper.selectJoinCount(new MPJLambdaWrapper<>()
                    .select(UserDO::getId)
                    .leftJoin(UserAddressDO.class, UserAddressDO::getUserId, UserDO::getId)
                    .eq(UserDO::getId, 2));
            System.out.println(count);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    对应sql

    SELECT COUNT( t.id ) FROM user t LEFT JOIN user_address t1 ON (t1.user_id = t.id) WHERE (t.id = ?)
    
    • 1

    MPJQueryWrapper

    class MpJoinTest {
        @Resource
        private UserMapper userMapper;
    
        @Test
        void joinTest() {
            UserDTO dto = userMapper.selectJoinOne(UserDTO.class, new MPJQueryWrapper()
                    .selectAll(UserDO.class)
                    .select("addr.address")
                    .leftJoin("user_address addr on addr.user_id = t.id")
                    .eq("t.id", 2));
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    对应sql

    SELECT 
        t.id,
        t.name,
        t.sex,
        t.head_img,
        addr.address,
    FROM 
        user t 
        LEFT JOIN user_address addr on addr.user_id = t.id 
    WHERE (
        t.id = ?)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    MPJLambdaWrapper

    class MpJoinTest {
        @Resource
        private UserMapper userMapper;
    
        @Test
        void joinTest() {
            UserDTO dto = userMapper.selectJoinOne(UserDTO.class,
                    new MPJLambdaWrapper<>()
                            .selectAll(UserDO.class)
                            .select(UserAddressDO::getAddress)
                            .leftJoin(UserAddressDO.class, UserAddressDO::getUserId,UserDO::getId)
                            .eq(UserDO::getId, 2));
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    对应sql

    SELECT 
        t.id,
        t.name,
        t.sex,
        t.head_img,
        t1.address 
    FROM 
        user t 
        LEFT JOIN user_address t1 ON t1.user_id = t.id 
    WHERE (
        t.id = ?)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    注意:如果执行sql返回多条记录会如下报错,请自行处理

    org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 2
    
    
    
    • 1
    • 2
    • 3
    具体参考官网: https://gitee.com/best_handsome/mybatis-plus-join/wikis/API%E6%96%B9%E6%B3%95/SelectJoinOne
    
    • 1
  • 相关阅读:
    Python学习 day01(注意事项)
    【S1002基于vue+nodejs的学生竞赛报名管理系统-哔哩哔哩】 https://b23.tv/xhyyT9U
    【SA8295P 源码分析】98 - MARVELL 88Q5152 Switch 芯片介绍
    【buildroot】buildroot使用笔记-04 | 重构的规则和方法
    如何查看前端的vue项目是vue2还是vue3项目
    接口幂-全面详解(学习总结---从入门到深化)
    INFINI Labs 产品更新 | 发布 Easysearch Java 客户端,Console 支持 SQL 查询等功能
    服务器向客户端推送消息之——WebSocket详细使用
    Apple Watch的精织斜纹表带现已上市
    配置git-ssh
  • 原文地址:https://blog.csdn.net/weixin_43564627/article/details/134499618