新增 mybatis-plus-join

This commit is contained in:
wangzhs
2023-03-11 17:47:15 +08:00
parent 1c1894af7d
commit 670f67e551
7 changed files with 86 additions and 2 deletions

View File

@ -3,11 +3,15 @@ package cn.iocoder.yudao.module.system.dal.dataobject.user;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.mybatis.core.type.JsonLongSetTypeHandler;
import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
import cn.iocoder.yudao.module.system.enums.common.SexEnum;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
import icu.mhb.mybatisplus.plugln.annotations.JoinField;
import icu.mhb.mybatisplus.plugln.constant.RelevancyType;
import lombok.*;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
@ -93,4 +97,13 @@ public class AdminUserDO extends TenantBaseDO {
*/
private LocalDateTime loginDate;
/**
* 用户所属部门
*/
@JoinField(masterModelClass = AdminUserDO.class, masterModelField = "deptId",
sunModelClass = DeptDO.class, sunModelField = "id",
relevancyType = RelevancyType.ONT_TO_ONE, sunAlias = "d")
@TableField(exist = false, typeHandler = FastjsonTypeHandler.class)
private DeptDO dept;
}

View File

@ -16,6 +16,7 @@ import cn.iocoder.yudao.module.system.dal.dataobject.dept.PostDO;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.UserPostDO;
import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantDO;
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import cn.iocoder.yudao.module.system.dal.mysql.dept.DeptMapper;
import cn.iocoder.yudao.module.system.dal.mysql.dept.UserPostMapper;
import cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper;
import cn.iocoder.yudao.module.system.enums.common.SexEnum;
@ -23,6 +24,7 @@ import cn.iocoder.yudao.module.system.service.dept.DeptService;
import cn.iocoder.yudao.module.system.service.dept.PostService;
import cn.iocoder.yudao.module.system.service.permission.PermissionService;
import cn.iocoder.yudao.module.system.service.tenant.TenantService;
import icu.mhb.mybatisplus.plugln.extend.Joins;
import org.junit.jupiter.api.Test;
import org.mockito.stubbing.Answer;
import org.springframework.boot.test.mock.mockito.MockBean;
@ -63,6 +65,8 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest {
private AdminUserMapper userMapper;
@Resource
private UserPostMapper userPostMapper;
@Resource
private DeptMapper deptMapper;
@MockBean
private DeptService deptService;
@ -770,6 +774,37 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest {
userDO.getNickname());
}
@Test
public void testSelectUserIncludeDept_success() {
// 需设置 application-unit-test.yaml 文件中 spring.main.lazy-initialization: true
// 准备部门数据
DeptDO dept = new DeptDO();
dept.setName("测试");
dept.setStatus(CommonStatusEnum.ENABLE.getStatus());
deptMapper.insert(dept);
// 准备用户参数
UserCreateReqVO reqVO = randomPojo(UserCreateReqVO.class, o -> {
o.setSex(RandomUtil.randomEle(SexEnum.values()).getSex());
o.setMobile(randomString());
o.setPostIds(asSet(1L, 2L));
o.setDeptId(dept.getId());
});
// 调用
Long userId = userService.createUser(reqVO);
// 断言
AdminUserDO user = Joins.of(AdminUserDO.class)
.leftJoin(DeptDO.class, DeptDO::getId, AdminUserDO::getDeptId)
.end()
.eq(AdminUserDO::getId, userId)
.joinGetOne(AdminUserDO.class);
System.out.println("=========>" + user);
}
// ========== 随机对象 ==========
@SafeVarargs