MyBatis-Plus中联表查询用法

说到联表查询,在Mybatis中,我们最常用的方法是手写sql,像下面这样的标准join语句

SELECT 
    t.id,
    t.name,
    t.sex,
    addr.tel,
    addr.address
FROM
    user t
    LEFT JOIN user_address addr on t.id = addr.user_id
WHERE (
    addr.tel = ?

但歪哥一直不太喜欢手写原始sql,更喜欢用“面向对象”的方式来解决问题。

然而MyBatis-Plus并不直接支持,我们可以使用mybatis-plus-join库

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

然后直接写代码,如下

class test {
    @Resource
    private UserMapper userMapper;

    void testJoin() {
        MPJQueryWrapper wrapper = new MPJQueryWrapper<UserDO>()
                .selectAll(UserDO.class)
                .select(UserAddrDO::getTel,UserAddrDO::getAddress)
                .leftJoin(UserDO.class,UserDO::getId,UserAddrDO::getUserId")
                .eq(UserAddrDO::getTel, "18888888888");

        //查询
        List<UserDTO> list = userMapper.selectJoinList(UserDTO.class, wrapper);
    }
}

代码结构很清晰,也避免了手写sql可能出现的“笔误”,这就是“面向对象”的魅力。

歪哥比较喜欢这种方案,大家有什么看法呢?

原文链接:,转发请注明来源!