后台管理(三):springboot批量删除,插入和事务
我学习搭建的vue后台管理,最近弄到用户-权限-角色的分配。在做给角色分配权限的时候,涉及到数据库的批量删除,插入已经需要用到的事务。这里做一下记录。批量删除在分配的权限列表里面,我可以对角色分配的权限进行删除操作。权限分为三级。如果是删除第一级或者第二级权限,那么子权限肯定也要跟着删除,所以这就需要批量删除了。主要是在角色-权限关系表里面进行操作。这里主要将mapper里面的操作方式,其他没什么
我学习搭建的vue后台管理,最近弄到用户-权限-角色的分配。
在做给角色分配权限的时候,涉及到数据库的批量删除,插入已经需要用到的事务。这里做一下记录。
批量删除
在分配的权限列表里面,我可以对角色分配的权限进行删除操作。权限分为三级。
如果是删除第一级或者第二级权限,那么子权限肯定也要跟着删除,所以这就需要批量删除了。
主要是在角色-权限关系表里面进行操作。这里主要将mapper里面的操作方式,其他没什么好讲的。
springboot mapper代码:
@DeleteProvider(type = Provider.class, method = "batchDeleteRights")
int deleteRightsByIds(@Param("ids") String ids,@Param("roleid") Long roleid);
class Provider {
/* 批量删除权限 */
public String batchDeleteRights(String ids,Long roleid) {
StringBuilder sb = new StringBuilder();
sb.append("DELETE FROM t_role_right WHERE role_id="+roleid+" AND right_id IN ("+ids+")");
return sb.toString();
}
}
其实如果是操作mysql语句的话,其实就是如下语句
"DELETE FROM t_role_right WHERE role_id="+roleid+" AND right_id IN ("+ids+")"
这个其实很容易,但是如果是springboot的注解方式,不熟悉的人可能就有点懵逼了。方法就是上面。说白的,就是拼接的方式表达方法而已。
批量插入
分配权限的时候需要将一级二级二级权限id全部传到服务器进行关联,这个时候就涉及到批量插入的问题。老规矩,上代码,还是mapper的代码。
@Insert({
"<script>",
"insert into t_role_right(role_id,right_id) values ",
"<foreach collection='ids' item='item' index='index' separator=','>",
"(#{roleId}, #{item})",
"</foreach>",
"</script>"
})
int insertRightsToRole(@Param(value="ids") List<String> ids,@Param(value="roleId") Long roleId);
单纯操作数据库肯定容易,但是在springboot怎么表示才是我们要知道的,上面是另外一种拼接和操作方式,和上面批量删除的方式一样都可以用来操作批量删除和批量插入。这边主要是为了了解和学习,所以用了两种方式。
事务
在进行上面批量插入的时候,我需要先删除该角色下的所有权限再进行批量插入,但是有一个问题,万一我删除完,批量插入失败了,那不就悲剧了吗。所以这个时候,就需要事务了。
在springboot使用事务也挺容易的,就是在服务实现类的方法里面添加@Transactional
代码如下:
@Service
public class TAdminUserServiceImpl implements TAdminUserService {
@Transactional
@Override
public int insertRightsToRole(List<String> ids, Long roleId) {
tAdminUserMapper.deleteRightByRoleId(roleId); //删除角色下的权限
return tAdminUserMapper.insertRightsToRole(ids,roleId); //批量插入
}
}
另外需要在Application添加@EnableTransactionManagement。不过也有人说不用加也行,我没有去具体尝试,有兴趣可以去试试。
git前端地址:https://gitee.com/stonezry/Vue-Admin-Demo
git接口地址:https://gitee.com/stonezry/Springboot-Admin-Demo
欢迎关注本人公众号和小程序,谢谢
更多推荐
所有评论(0)