[个人笔记]基于SSM项目的批量删除、拦截等功能实现

1 批量删除功能
在之前开发的基础上可以在jsp界面中看到有多选框和是删除按钮,批量删除的功能就是在多选框下选择好待处理的用户信息,进行批量删除实现。
在这里插入图片描述
在这里插入图片描述在这里插入图片描述功能实现

(1) 在userDao下声明一个批量删除的接口,并传入一个List集合

void deleteAll(@Param("ids")List<Integer> ids);

(2) 在UserMapper中声明一个批量删除的sql语句,遍历集合中的每个元素

  <delete id="deleteAll" parameterType="list">
        delete from tb_user where id  in
        <foreach collection="ids" item="id" open="(" close=")" separator=",">
            #{id}
        </foreach>
    </delete>

(3) 在Service中调用dao中接口
同样先在Service中声明一个接口

 void deleteAll(List<Integer> ids);

再在impl中实现该接口并调用dao接口

  @Override
    public void deleteAll(List<Integer> ids) {
        userDao.deleteAll(ids);
    }

在jsp部分,先将所有获取到的选择框的id先保存到一个数组userList中,再将该数组转为String类型通过ajax传到后端,所以后端接收到的数据为一个字符串类型,(例如{1,2,3,4})
user-list.jsp 删除多项部分

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("删除失败");
						}
					});
				}
			}

在UserController对接收到的字符串先进行分割处理,再遍历添加进集合中

  @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";
    }

最后运行得到批量删除的效果

关于ajax的内容可以看我之前写过关于ajax的内容
ajax数据交互 手动搭建后台

2.Filter拦截器
使用Filter可以对用户请求进行预处理和HttpServletResponse进行后处理,在本项目中主要用于拦截未登录状态直接访问后续界面

(1)修改controller,在login方法处用户登陆验证成功时,将用户信息存入session 的 ‘user’ 字段中

@RequestMapping("/login.do")//指定请求的URL 在user拦截
    //拿到一个封装好的user对象 存到session中
    public ModelAndView login(User user,HttpSession session){ //session.setAttribute()
        //拿到用户名
        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;
    }

(2)新建filter拦截器
在和controller包同级的目录下新建一个filter文件夹,在filter下新建一个loginFilter.java文件,实现Filter接口。

package com.zhongruan.filter;

import com.zhongruan.bean.User;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.logging.LogRecord;

public class LoginFilter implements Filter {
    //生命周期  初始化 ->  实现  ->  销毁

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;      //请求体
        HttpServletResponse response = (HttpServletResponse) servletResponse;   //响应体
        HttpSession session = request.getSession();  //用户发送的请求

        User user = (User) session.getAttribute("user");
        String uri = request.getRequestURI();
        System.out.println("uri---------"+uri);
        System.out.println("url.indexOf------------- -----:"+uri.indexOf("login.do"));

        if(user==null && uri.indexOf("login.do")==-1){
            response.sendRedirect(request.getContextPath());
        }else {
            filterChain.doFilter(request, response);
        }
    }

    @Override
    public void destroy() {

    }
}

在doFilter中提取到之前存入session的user值,并联合当前路由进行判断,当user为空并且路由不含login.do时,默认跳转到登陆界面,否则放行

在配置好controller和filter之后还需要到web.xml配置文件中配置启动过滤器,在filter-mapping中的url-pattern即拦截的路径

  <!--过滤拦截-->
  <filter>
    <filter-name>loginFilter</filter-name>
    <filter-class>com.zhongruan.filter.LoginFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>loginFilter</filter-name>
    <url-pattern>*.do</url-pattern>
  </filter-mapping>

达到的效果即在未登录状态下拦截所有的.do路径,默认跳转到登陆界面
(3)用户添加角色权限功能
该部分主要给用户设置管理员等权限操作,目前只能通过数据库先指定用户权限,再在界面中更具用户权限使用不同的功能,在界面给用户添加权限功能待开发。
(1)新建数据库关系映射
在mysql中ssm库下新建数据表role_ssm和user_role,分别用于储存角色种类和用户角色关系映射。表结构如下
在这里插入图片描述在这里插入图片描述
当在user_role表里面,roleId为1的那个user账号登录才会有添加角色功能的按钮。而user_role表里面的数据不能乱输的,他这里的userid就是user表当中的id

(2)新建实体类
在实体类中按照数据库中信息新建实体类
Role.java

package com.zhongruan.bean;

public class Role {
    private int id;
    private String rolename;
    private String roledesc;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getRolename() {
        return rolename;
    }

    public void setRolename(String rolename) {
        this.rolename = rolename;
    }

    public String getRoledesc() {
        return roledesc;
    }

    public void setRoledesc(String roledesc) {
        this.roledesc = roledesc;
    }

    @Override
    public String toString() {
        return "Role{" +
                "id=" + id +
                ", rolename='" + rolename + '\'' +
                ", roledesc='" + roledesc + '\'' +
                '}';
    }
}

UserRole.java

package com.zhongruan.bean;

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;
    }


    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public int getRoleId() {
        return roleId;
    }

    public void setRoleId(int roleId) {
        this.roleId = roleId;
    }

    @Override
    public String toString() {
        return "UserRold{" +
                "id=" + id +
                ", userId=" + userId +
                ", roleId=" + roleId +
                '}';
    }
}

(3)新建Dao接口
在dao目录下新建一个专门用于Role的RoleDao,声明接口方法

package com.zhongruan.dao;

import com.zhongruan.bean.Role;
import com.zhongruan.bean.UserRole;

import java.util.List;

public interface RoleDao {
    //根据userid查找roleid
    List<Integer> findRoleIdByUserId(int userId);

    //根据userid查找role
    List<Role> findRoleByUserId(int id);
    //添加role
    void  addRole(UserRole userRold);
}

(4)新建Mapper
新建了一个RoleDao同样也需要新建一个RoleMapper来声明sql语句

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.zhongruan.dao.RoleDao" >
    <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 tb_role 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>
</mapper>

(5)新建Service
新建一个RoleService接口声明接口方法(和dao中一样)

package com.zhongruan.service;

import com.zhongruan.bean.Role;

import java.util.List;

public interface RoleService {
    List<Integer> findRoleId(int userId);
    List<Role> findRoleByUserId(int id );
    void add(List<Integer> ids,String userId);
}

再声明一个RoleServiceImpl来调用dao中的接口方法使用sql语句

package com.zhongruan.service.impl;

import com.zhongruan.bean.Role;
import com.zhongruan.bean.UserRole;
import com.zhongruan.dao.RoleDao;
import com.zhongruan.service.RoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@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);
        }
    }
}

(6)修改UserController
修改

 //把列表展示出来
    @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 "";
    }

(6)修改jsp文件
修改jsp部分仅仅添加一个button到界面中实现跳转到添加角色界面,该button仅在管理员权限下的user才能查看,普通用户不能进行该操作,但添加角色功能尚未完成。
在user-list.jsp下

<tbody>
						    <c:forEach items="${pageInfo.list}" var="user"><!--将在列表获取到的每一个数据封装为一个user-->
										<tr>
											<td><input id="ids" name="ids" type="checkbox" value="${user.id}"></td>
											<td>${user.id}</td>
											<td>${user.username}</td>
											<td>${user.password}</td>
											<td class="text-center">
												<a href="/user/toUpdate.do?id=${user.id}" class="btn bg-olive btn-xs">更新</a>
												<a href="/user/deleteById.do?id=${user.id}" class="btn bg-olive btn-xs">删除</a>
												<% List<Integer> roleIds = (List<Integer>) session.getAttribute("roleIds");%>
												<% if (roleIds.contains(1)){%>
												<a href="/user/toAddRole.do?id=${user.id}">添加角色</a>
												<%}%>
											</td>
										</tr>
									</c:forEach>
									
								</tbody>

结果图
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值