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

来源:互联网 发布:男士护肤品 知乎 编辑:程序博客网 时间:2024/05/16 14:10

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

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


表如下:

用户id 角色id 1 1 1 2 1 3 2 1 2 3

如上表,在前端操作,后台接收到前端传来的值时,如:用户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);}
@Servicepublic class UserServiceImpl implements UserService{    @Autowired    private UserDao userDao;    @Override    public void updateUserRole(UserModel model){        userDao.deleteUserRoleById(model.getUserId());        userDao.addUserRole(model);    }}

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

那么,看下面这张表:

用户id 角色id 创建时间 1 1 2017-05-01 1 2 2017-05-10 1 3 2017-06-12 2 1 2017-05-01 3 2 2017-05-10 3 3 2017-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);}
@Servicepublic 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>
阅读全文
0 0
原创粉丝点击