mirror of
https://gitee.com/best_handsome/mybatis-plus-join
synced 2025-07-11 00:02:22 +08:00
3.7 KiB
3.7 KiB
连表通用wrapper
官方提供的自定义sql不支持表别名和多实体泛型,扩展能力有限,对此就行了优化
使用方法
如需单独使用 请拷贝以下6个类
com.github.yulichang.common.JoinLambdaWrapper
com.github.yulichang.common.JoinAbstractWrapper
com.github.yulichang.common.JoinAbstractLambdaWrapper
com.github.yulichang.wrapper.interfaces.Compare
com.github.yulichang.wrapper.interfaces.Func
com.github.yulichang.toolkit.LambdaUtils
不使用表别名
注解:
@Mapper
public interface UserMapper extends BaseMapper<UserDO> {
@Select("select user.*,user_address.tel from user left join user_address on user.id = user_address.user_id ${ew.customSqlSegment}")
UserDTO userLeftJoin(@Param(Constants.WRAPPER) Wrapper<?> queryWrapper);
}
或者xml
<select id="userLeftJoin" resultType="UserDTO">
select
user.*,
user_address.tel
from
user
left join user_address on user.id = user_address.user_id
${ew.customSqlSegment}
</select>
使用wrapper:
class MpJoinTest {
@Resource
private UserMapper userMapper;
@Test
void test() {
UserDTO userDTO = userMapper.userLeftJoin(new JoinLambdaWrapper<>()
.eq(UserDO::getId, "1")
.eq(UserAddressDO::getUserId, "1"));
}
}
对应sql:
select
user.*,
user_address.tel
from
user
left join user_address on user.id = user_address.user_id
WHERE (
user.id = ?
AND user_address.user_id = ?)
使用表别名
注解:
@Mapper
public interface UserMapper extends BaseMapper<UserDO> {
@Select("select u.*,ua.tel from user u left join user_address ua on u.id = ua.user_id ${ew.customSqlSegment}")
UserDTO userLeftJoin(@Param(Constants.WRAPPER) Wrapper<?> queryWrapper);
}
或者xml
<select id="userLeftJoin" resultType="UserDTO">
select
u.*,
ua.tel
from
user u
left join user_address ua on u.id = ua.user_id
${ew.customSqlSegment}
</select>
使用wrapper:
class MpJoinTest {
@Resource
private UserMapper userMapper;
@Test
void test() {
UserDTO userDTO = userMapper.userLeftJoin(new JoinLambdaWrapper<>()
.alias(UserDO.class, "u") //如果使用别名需要再此声明别名与实体的对应关系
.alias(UserAddressDO.class, "ua") //如果使用别名需要再此声明别名与实体的对应关系
.eq(UserDO::getId, "1")
.eq(UserAddressDO::getUserId, "1"));
}
}
对应sql:
select
u.*,
ua.tel
from
user u
left join user_address ua on u.id = ua.user_id
WHERE (
u.id = ?
AND ua.user_id = ?)
QQ群:1022221898