参考: https://gitee.com/best_handsome/mybatis-plus-join/wikis/%E5%AE%89%E8%A3%85
方法一
com.github.yulichang
mybatis-plus-join
1.3.3
方法二
clone代码到本地,执行mvn install,添加依赖
com.github.yulichang
mybatis-plus-join
1.3.3
mapper继承MPJBaseMapper
@Mapper
public interface UserMapper extends MPJBaseMapper {
}
(可选)service继承MPJBaseService
public interface UserService extends MPJBaseService {
}
(可选)serviceImpl继承MPJBaseServiceImpl
@Service
public class UserServiceImpl extends MPJBaseServiceImpl implements UserService {
}
连表查询返回记录总数
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);
}
}
对应sql
SELECT COUNT( * ) FROM user t LEFT JOIN user_address addr on addr.user_id = t.id WHERE (t.id = ?)
如果要执行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);
}
}
对应sql
SELECT COUNT( t.id ) FROM user t LEFT JOIN user_address addr on addr.user_id = t.id WHERE
(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);
}
}
对应sql
SELECT COUNT( * ) FROM user t LEFT JOIN user_address t1 ON (t1.user_id = t.id) WHERE (t.id = ?)
如果要执行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);
}
}
对应sql
SELECT COUNT( t.id ) FROM user t LEFT JOIN user_address t1 ON (t1.user_id = t.id) WHERE (t.id = ?)
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));
}
}
对应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 = ?)
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));
}
}
对应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 = ?)
注意:如果执行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
具体参考官网: https://gitee.com/best_handsome/mybatis-plus-join/wikis/API%E6%96%B9%E6%B3%95/SelectJoinOne