1、用户批量删除
1.1 编写JavaScript,获得删除用户列表:
编写函数deleteAll(),首先获取用户选择的个数,然后新建一个列表userList,将选中的所有id装入其中。然后用ajax将数据传递给controller中的处理方法deleteAll.do
function deleteAll() {
var checkedNum=$("input[name='ids']:checked").length;
alert(checkedNum);
if(checkedNum==0){
alert("请至少选择一个进行删除!!!");
return;
}
if(confirm("确认要删除这些用户吗?")){
var userList=new Array();
$("input[name='ids']:checked").each(
function () {
userList.push($(this).val())
}
);
alert(userList);
$.ajax({
type:"post",
url: "${pageContext.request.contextPath}/user/deleteAll.do",
data:{userList:userList.toString()},
success:function () {
alert("删除成功");
location.reload();
},
error:function () {
alert("删除失败");
}
});
}
}
1.2 编写Dao层
接下来是要在数据库中删除对应的id,按照由下至上的顺序,先写dao层接口:
void deleteAll(@Param("ids")List<Integer> ids);
编写sql语句
我们获取ids中的所有id,传入数据库进行删除。这里注意参数类型要填"list"
<delete id="deleteAll" parameterType="list">
delete from user_tb where id in
<foreach collection="ids" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</delete>
1.3 编写Service层方法
直接调用dao的删除操作,传入的是一个int的id集合
@Override
public void deleteAll(List<Integer> ids) {
userDao.deleteAll(ids);
}
1.4 编写Controller层方法
注意我们从前端拿到的参数是转化成了String类型,所以这里先要用split()函数进行一次切分操作,之后就可以将列表对象送到下层进行数据库操作了。数据库更新信息之后,再重定向到列表更新用户信息表。
@RequestMapping("deleteAll.do")
public String deleteAll(String userList){
String[] str=userList.split(",");
List<Integer> ids=new ArrayList<>();
for(String s:str){
ids.add(Integer.parseInt(s));
}
userService.deleteAll(ids);
return "redirect:findAll.do";
}
1.5 测试
2 用户权限管理
管理用户权限需要为用户添加新的属性,也可以新加一个单独的权限实体,然后添加一个用户-权限对应实体类。
2.1 数据库设计
添加一个专门存放用户权限种类的表,和一个用户-权限对应关系表:
- 权限表
表中添加两种权限:
- 用户-权限表:
2.2 编写实体类
根据数据库表结构编写实体类:
public class Role {
private int id;
private String rolename;
private String roledesc;
private getters and setters
}
public class UserRole {
private int id;
private int userId;
private int roleId;
public UserRole() {
}
public UserRole(int id, int userId, int roleId) {
this.id = id;
this.userId = userId;
this.roleId = roleId;
}
private getters and setters
}
2.3 编写dao层
接口:三个方法,1 给指定用户添加权限 2 根据user编号返回他所有的权限对象 3 根据user编号返回他所有的权限编号:
public interface RoleDao {
List<Integer> findRoleIdByUserId(int userId);
List<Role> findRoleByUserId(int id);
void addRole(UserRole userRole);
}
在mapper中编写sql语句:
<select id="findRoleIdByUserId" parameterType="int" resultType="int">
select roleId from user_role where userId=#{userId}
</select>
<select id="findRoleByUserId" parameterType="int" resultType="role">
select * from role_tb where id not in (select roleId from user_role where userId=#{id})
</select>
<insert id="addRole" parameterType="userRole">
insert into user_role (userId,roleId) values (#{userId},#{roleId})
</insert>
2.4 编写服务层方法
主要是add中由于拿到的是一个用户权限列表,所以用一个循环添加,另外记得要注入上一层的对象,以及添加Service注解
@Service
public class RoleServiceImpl implements RoleService {
@Autowired
private RoleDao roleDao;
@Override
public List<Integer> findRoleId(int userId) {
return roleDao.findRoleIdByUserId(userId);
}
@Override
public List<Role> findRoleByUserId(int id) {
return roleDao.findRoleByUserId(id);
}
@Override
public void add(List<Integer> ids, String userId) {
for(int roleId:ids){
UserRole userRole=new UserRole();
userRole.setUserId(Integer.parseInt(userId));
userRole.setRoleId(roleId);
roleDao.addRole(userRole);
}
}
}
2.5 编写和修改Cotroller类
由于添加了权限,现在要在用户登录的时候将其权限加入session中记录:
@RequestMapping("/login.do")
private ModelAndView login(User user,HttpSession session){
int id=userService.login(user.getUsername(),user.getPassword());
ModelAndView mv=new ModelAndView();
if(id!=-1){
List<Integer> roleIds=roleService.findRoleId(id);
session.setAttribute("roleIds",roleIds);
session.setAttribute("user",user);
mv.setViewName("main");
}else{
mv.setViewName("../failer");
}
return mv;
}
添加权限也和修改用户信息一样包含了两步。首先进入添加权限界面,得到权限信息之后再进入修改操作
@RequestMapping("toAddRole.do")
public ModelAndView toAddRole(int id){
List<Role> roleList=roleService.findRoleByUserId(id);
ModelAndView mv=new ModelAndView();
mv.addObject("roles",roleList);
mv.addObject("id",id);
mv.setViewName("user-role-add");
return mv;
}
@RequestMapping("addRole.do")
@ResponseBody
public String add(String roleList,String userId){
String[] strs=roleList.split(",");
List<Integer> ids=new ArrayList<>();
for(String s:strs){
ids.add(Integer.parseInt(s));
}
roleService.add(ids,userId);
return "";
}
2.6 添加角色管理按键
注意这里在显示之前先要做一个用户角色的判断,如果用户是管理员才能修改其他人的权限。
<% List<Integer> roleIds=(List<Integer>) session.getAttribute("roleIds");%>
<% if(roleIds.contains(1)){%>
<a href="/user/toAddRole.do?id=${user.id}">添加角色</a>
<%}%>