java中用户对应多个角色时的新增、修改、删除处理操作

java中用户对应多个角色时的新增、修改、删除处理操作

本例中在的数据库存储时,是采用存储多条记录


表如下:
用户id角色id
11
12
13
21
23

如上表,在前端操作,后台接收到前端传来的值时,如:用户id为1,角色id为1,2(或者1,2,3,4等等),这时我们可以选择一种简单的处理方式,注意:仅仅说是可以选择。就是把原来数据库中存储的条件用户id为1的记录全部删除,然后再做新增操作,把所有的角色id再添加进去。

代码块

public interface UserDao {
    /** 新增用户角色 */
    public void addUserRole(UserModel user);
    /** 删除用户角色 */
    public boolean deleteUserRoleById(Integer userId);
}
@Service
public class UserServiceImpl implements UserService{
    @Autowired
    private UserDao userDao;

    @Override
    public void updateUserRole(UserModel model){
        userDao.deleteUserRoleById(model.getUserId());
        userDao.addUserRole(model);
    }
}

当然,这样是可以的,但是如您所想,这种操作也存在一定的风险,如果执行过程中出现异常、错误之类的,那么,即便有回滚这一步,数据也是有可能会出现问题的。

那么,看下面这张表:
用户id角色id创建时间
112017-05-01
122017-05-10
132017-06-12
212017-05-01
322017-05-10
332017-06-12

这时,当我们在前端操作,后台接收到前端传来的值时,如:用户id为1,角色id为1,3,4这种,此时我们考虑上面那种处理方式,把原来数据库中存储的条件用户id为1的记录全部删除,然后再做新增操作,把所有的角色id再添加进去。你会发现创建时间怎么办?所以我暂时想到的是:

代码块

public interface UserDao {
    /** 查询某用户所有角色记录 */
    public List<UserModel> queryListById(UserModel user);
    /** 新增用户角色 */
    public void addUserRole(UserModel user);
    /** 删除用户角色 */
    public boolean deleteUserRoleById(Integer userId, Integer roleId);
    /** 更新用户角色 */
    public boolean updateUserRole(UserModel user);
}
@Service
public class UserServiceImpl implements UserService{
    @Autowired
    private UserDao userDao;

    @Override
    public void updateUserRole(UserModel model){
        // 查询所有已有角色记录
        List<UserModel> list = userDao.queryListById(model.getUserId());
        String[] idArr = model.getRoleIds().split(",");
        // 先做新增、修改
        for (int i = 0; i < idArr.length; i++) {
          model.setRoleId(Integer.parseInt(idArr[i]));
           // 根据userIdroleId作为条件,如果更新失败说明数据库无此记录,则需要插入
           if (!userDao.updateUserRole(model)) {
               model.setCreTime(DateUtil.getNowDate("YYYY-MM-dd"));
               // 新增操作
               userDao.addUserRole(model);
           }
        }
        // 再做删除操作
        for (UserModel user : list) {
            // 如果数据库中在前端传过来的值中没有匹配到,则可删除
           if (model.getRoleIds().indexOf(user.getRoleId().toString()) == -1) {
               // 删除操作
               userDao.deleteUserRoleById(user.getUserId(), user.getRoleId());
           }
        }
    }
}
这里补一句上段代码中(if判断条件)的sql:
UPDATE pub_user_role
<set>
    role_id = #{roleId }
</set>
<where>
    role_id = #{roleId } AND user_id = #{userId }
</where>
  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值