MyBatis-Plus-Join

repository·master·Indexed 23 days ago

https://github.com/yulichang/mybatis-plus-join

An extension for MyBatis-Plus that simplifies multi-table join queries using a type-safe Lambda-based wrapper. It provides MPJLambdaWrapper for constructing complex SQL joins and requires mappers to extend MPJBaseMapper. Supports Spring Boot via mybatis-plus-join-boot-starter and Solon via mybatis-plus-join-solon-plugin.

Tokens
1.2K
Snippets
5
Records
7
Agent score
31%

What's inside mybatis-plus-join

  1. Install MyBatis-Plus-Join

    master

    You can install MyBatis-Plus-Join using Maven or Gradle. For Spring Boot projects, use the mybatis-plus-join-boot-starter artifact.

    Maven

    <dependency>
        <groupId>com.github.yulichang</groupId>
        <artifactId>mybatis-plus-join-boot-starter</artifactId>
        <version>1.5.9</version>
    </dependency>

    Gradle

    implementation 'com.github.yulichang:mybatis-plus-join-boot-starter:1.5.9'
  2. Perform join queries using MPJLambdaWrapper

    master

    Use MPJLambdaWrapper for type-safe join queries. This allows you to select fields from multiple tables, define join conditions, and apply filters using Lambda expressions.

    Example: Simple Join Query

    class test {
        @Resource
        private UserMapper userMapper;
    
        void testJoin() {
            MPJLambdaWrapper<UserDO> wrapper = JoinWrappers.lambda(UserDO.class)
                    .selectAll(UserDO.class)
                    .select(AddressDO::getTel)
                    .leftJoin(AddressDO.class, AddressDO::getUserId, UserDO::getId)
                    .eq(UserDO::getId, 1)
                    .like(AddressDO::getTel, "1");
    
            // Join query returning a custom ResultType
            List<UserDTO> list = userMapper.selectJoinList(UserDTO.class, wrapper);
    
            // Paginated join query (requires MyBatis-Plus pagination plugin to be enabled)
            Page<UserDTO> listPage = userMapper.selectJoinPage(new Page<>(2, 10), UserDTO.class, wrapper);
        }
    }

    Generated SQL equivalent:

    SELECT  
        t.id, t.name, t.sex, t.head_img, 
        t1.tel
    FROM user t 
        LEFT JOIN address t1 ON t1.user_id = t.id
    WHERE ( t.id = ? AND t1.tel LIKE ? )
    class test {
        @Resource
        private UserMapper userMapper;
    
        void testJoin() {
            MPJLambdaWrapper<UserDO> wrapper = JoinWrappers.lambda(UserDO.class)
                    .selectAll(UserDO.class)
                    .select(AddressDO::getTel)
                    .leftJoin(AddressDO.class, AddressDO::getUserId, UserDO::getId)
                    .eq(UserDO::getId, 1)
                    .like(AddressDO::getTel, "1");
    
            // 连表查询 返回自定义ResultType
            List<UserDTO> list = userMapper.selectJoinList(UserDTO.class, wrapper);
    
            // 分页查询 (需要启用 mybatis plus 分页插件)
            Page<UserDTO> listPage = userMapper.selectJoinPage(new Page<>(2, 10), UserDTO.class, wrapper);
        }
    }