前言
在使用jpa注解生成三方表实现增删
示例
表结果
建立一个sys_user_group
表
less
@Entity
@Data
@FieldNameConstants
@Table(name = "sys_user_group")
public class UserGroup {
@Id
private Long id;
private String name;
@ManyToMany
@JsonManagedReference
@JoinTable(name = "sys_user_group_rel", joinColumns = { @JoinColumn(name = "user_group_id") }, inverseJoinColumns = {@JoinColumn(name = "user_id")})
private List<User> userList;
}
建立一个user
表
less
@Entity
@Table(name = "sys_user")
@Data
@FieldNameConstants
public class User {
@Id
private Long id;
private String phoneNo;
@ManyToMany
@JoinTable(name = "sys_user_group_rel", joinColumns = { @JoinColumn(name = "user_id") }, inverseJoinColumns = {@JoinColumn(name = "user_group_id")})
private List<UserGroup> userGroupList;
}
关联三方表
ini
public void addUserToUserGroup(AddUserToUserGroupDto addUserToUserGroupDto) {
if (CollectionUtils.isEmpty(addUserToUserGroupDto.getUserIds())) {
return;
}
UserGroup userGroup = this.findById(addUserToUserGroupDto.getUserGroupId())
.orElseThrow(() -> new BusinessException("用户组不存在"));
addUserToUserGroupDto.getUserIds().removeIf(e -> userGroup.getUserList().stream().anyMatch(e1 -> e1.getId().equals(e)));
if (CollectionUtils.isEmpty(addUserToUserGroupDto.getUserIds())) {
return;
}
List<User> userList = iUserRepository.findByIdIn(addUserToUserGroupDto.getUserIds());
if (CollectionUtils.isEmpty(userList)) {
return;
}
List<User> users = new ArrayList<>(10);
userList.forEach(user -> {
User user1 = new User();
user1.setId(user.getId());
users.add(user1);
});
userGroup.setUserList(users);
this.save(userGroup);
}
这个方法是一直往关联表新增用户和用户组关联关系,但是使用了
bash
userGroup.setUserList(users);
待会会执行delete语句,就是把查到的userGroup之前的数据删除,新增对用的users 备注: 如果不想删除之前的数据,使用
scss
userGroup.getUserList().addAll(userList);
这样就不会把userGroup之前的数据删除,会新增新加的users

移除用户
scss
public void removeUserToUserGroupDto(RemoveUserToUserGroupDto removeUserToUserGroupDto) {
if (CollectionUtils.isEmpty(removeUserToUserGroupDto.getUserIds())) {
return;
}
UserGroup userGroup = this.findById(removeUserToUserGroupDto.getUserGroupId())
.orElseThrow(() -> new BusinessException("用户组不存在"));
userGroup.setUserList(userGroup.getUserList().stream().filter(u -> !removeUserToUserGroupDto.getUserIds().contains(u.getId())).collect(Collectors.toList()));
save(userGroup);
}
将userGroup查到的user过滤掉,然后重新save就可以了
总结
JPA提供的关联注解功能倒是强大,可以帮助节省一些事情,但是技术选型就看自己擅长