说到联表查询,在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可能出现的“笔误”,这就是“面向对象”的魅力。
歪哥比较喜欢这种方案,大家有什么看法呢?