0.引言

前面文章已经实现了登录,查询,添加,修改和删除等功能,本篇文章在前面的基础上继续实现删除选中的功能。

一.分析

删除功能分析

》》》1.在前端list.jsp页面的删除选中的按钮中绑定需要删除的记录条目的id,如下代码中:


<script type="text/javascript">
//处理选中删除的js

  function deluser(i) {
     //用户安全提示
	 if(confirm("您确定需要删除吗?")){
	     location.href="${pageContext.request.contextPath }/delUserServlet?id="+i;
	  }
  }
         
 window.onload=function(){
      //给删除选中按钮添加点击事件
      document.getElementById("delselcted").onclick=function(){
         if(confirm("您确定删除这些选项吗?")){  //在删除前给删除添加保险
              //判断选项中是否有被选上的,如果没有的话不执行删除,否则没有if会造成空指针异常
        	  var flag =false;
        	  var cbs=document.getElementsByName("uid");  //获取所有的选项(包括选的,没有选的)
        	  for(var i=0;i<cbs.length;i++){
        		   if(cbs[i].checked){  //一旦有被选的项,就停止循环
        		    	flag=true;
        		    	break;  
        		    }
        	  }
              if(flag){//一旦有被选的项,就提交表单
                //一旦删除选中,首先创建一个表单,把所有信息提交给delselectedservlet处理
        		 document.getElementById("form").submit();  
              }
        		    		
        		       
          }
      }
        	    
    //一键全选,一键全不选
     //通过id获取第一个全选项
    document.getElementById("firstcb").onclick=function(){
          var cbs=document.getElementsByName("uid");
          //遍历下面所有的选项
          for(var i=0;i<cbs.length;i++){
        	 //设置cbs[i].checked的状态与第一个firstcb.checked相同
        	 cbs[i].checked=this.checked;
           }
    }; 
 }
 
</script>



<div style="float: right; margin: 5px;">    
       <a class="btn btn-primary" href="${pageContext.request.contextPath }/add.jsp">添加联系人</a>
       <a class="btn btn-primary" href="javascript:void(0);" id="delselcted">删除选中</a>  
</div>

接下来表单的

 <%--下面这个form表单是为了提交所有选择的删除项 至delselectedservlet
    至于delselectedservlet怎么获得那个项被选中,可以首先设置表单提交,然后将input中checkbox栏,设name="id"
    使之该id的value=${user.id},最后通过表单提交给了delselectedservlet
     --%>
  <form action="${pageContext.request.contextPath }/delselectedservlet" id="form" method="post">
        <table border="1" class="table table-bordered table-hover">
	        <tr class="success">
	            <th><input type="checkbox" id="firstcb"></th>
	            <th>编号</th>
	            <th>姓名</th>
	            <th>性别</th>
	            <th>年龄</th>
	            <th>籍贯</th>
	            <th>QQ</th>
	            <th>邮箱</th>
	            <th>操作</th>
	        </tr>
	        <c:forEach items="${pb.list}" var="user" varStatus="s">
	               <tr>   
                        <%-- 这里-绑定了每个checkbox 的name=uid  value绑定的是用户的id --%>
	                    <td><input type="checkbox"  name="uid"  value="${user.id}"></td>
			            <td>${s.count+start}</td>
			            <td>${user.name}</td>
			            <td>${user.gender }</td>
			            <td>${user.age }</td>
			            <td>${user.address }</td>
			            <td>${user.qq }</td>
			            <td>${user.email }</td>
			            <td><a class="btn btn-default btn-sm" href="${pageContext.request.contextPath }/queryupdate?id=${user.id}">修改</a>&nbsp;
			                <a class="btn btn-default btn-sm" href="javascript:deluser(${user.id});" >删除</a></td>
	        		</tr>
	        </c:forEach>
	    </table>
    </form>
	    
    
    <div>
    
        <nav aria-label="Page navigation">
            <ul class="pagination">
                <c:if test="${pb.currentPage==1 }">  <%--如果当前按钮为1,应该使他禁止状态 --%>
                     <li class="disabled">
                        <a href="${pageContext.request.contextPath }/finduserpageservlet?currentPage=${pb.currentPage-1}&rows=5&name=${condtion.name[0]}&address=${condtion.address[0]}&email=${condtion.email[0]}" 
                          aria-label="Previous">
                        <span aria-hidden="true">&laquo;</span>
                        </a>
                     </li>
                </c:if>
                <c:if test="${pb.currentPage!=1 }">  <%--如果当前按钮不为1 --%>
                     <li>
                        <a href="${pageContext.request.contextPath }/finduserpageservlet?currentPage=${pb.currentPage-1}&rows=5&name=${condtion.name[0]}&address=${condtion.address[0]}&email=${condtion.email[0]}" 
                           aria-label="Previous">
                        <span aria-hidden="true">&laquo;</span>
                        </a>
                     </li>
                </c:if>
 
                    
                <c:forEach begin="1" end="${pb.totalPage }" step="1" var="i">
                   <c:if test="${pb.currentPage==i }">  <%--如果当前页码与循环体 刚好一致,就处于激活状态 --%>
                       <li class="active"><a href="${pageContext.request.contextPath }/finduserpageservlet?currentPage=${i}&rows=5&name=${condtion.name[0]}&address=${condtion.address[0]}&email=${condtion.email[0]}" >
                          ${i}</a></li>
                   </c:if>
                   <c:if test="${pb.currentPage !=i }">  <%--如果当前页码与循环体 不一致,就处于非激活状态 --%>
                       <li><a href="${pageContext.request.contextPath }/finduserpageservlet?currentPage=${i}&rows=5&name=${condtion.name[0]}&address=${condtion.address[0]}&email=${condtion.email[0]}" >
                          ${i}</a></li>
                   </c:if>
                   
                </c:forEach>
                
               <c:if test="${pb.currentPage==pb.totalPage }">  <%--如果当前按钮为最大页码,应该使他禁止状态 --%>
                     <li class="disabled">
                        <a href="${pageContext.request.contextPath }/finduserpageservlet?currentPage=${pb.currentPage+1}&rows=5&name=${condtion.name[0]}&address=${condtion.address[0]}&email=${condtion.email[0]}"
                          aria-label="Previous" >  <%--而又可以使用css是鼠标处于不可点击状态class="disable" --%>
                        <span aria-hidden="true">&raquo;</span>
                        </a>
                     </li>
                </c:if>
                <c:if test="${pb.currentPage!=pb.totalPage }">  <%--如果当前按钮不为不为最大页码 --%>
                     <li>
                        <a href="${pageContext.request.contextPath }/finduserpageservlet?currentPage=${pb.currentPage+1}&rows=5&name=${condtion.name[0]}&address=${condtion.address[0]}&email=${condtion.email[0]}"
                          aria-label="Previous" >
                        <span aria-hidden="true">&raquo;</span>
                        </a>
                     </li>
                </c:if>
                
                <span style="font-size: 25px;margin-left: 5px;">
                    <c:if test="${pb.totalCount==0 }">共0条记录,共0页</c:if>
                    <c:if test="${pb.totalCount!=0 }">共${pb.totalCount }条记录,共${pb.totalPage }页</c:if>
                </span>
            </ul>
        </nav>
       
    </div>
</div>
</body>
</html>

》》2.编写delselectedservlet获取uid(其实是选中的用户id)

          #获取用户id的组(可能多个勾选)

          #调用service层来删除用户信息

          #删除完后,重新重定向跳转到查询所有用户的界面

  

》》3.编写userservice类和userDao类

          #遍历从上一步delselectedservlet传过来的id数组

         #调用根据id来删除数据库用户的信息

二.代码的编写

2.1    list.jsp页面绑定删除选中用户的uid

然后通过提交表单的方式把删除选中用户的uid传入到了/delselectedservlet进行处理

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<!-- 网页使用的语言 -->
<html lang="zh-CN">
<head>
    <!-- 指定字符集 -->
    <meta charset="utf-8">
    <!-- 使用Edge最新的浏览器的渲染方式 -->
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <!-- viewport视口:网页可以根据设置的宽度自动进行适配,在浏览器的内部虚拟一个容器,容器的宽度与设备的宽度相同。
    width: 默认宽度与设备的宽度相同
    initial-scale: 初始的缩放比,为1:1 -->
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <title>用户信息管理系统</title>

    <!-- 1. 导入CSS的全局样式 -->
    <link href="css/bootstrap.min.css" rel="stylesheet">
    <!-- 2. jQuery导入,建议使用1.9以上的版本 -->
    <script src="js/jquery-2.1.0.min.js"></script>
    <!-- 3. 导入bootstrap的js文件 -->
    <script src="js/bootstrap.min.js"></script>
    <style type="text/css">
        td, th {
            text-align: center;
        }
        .disable {
	        pointer-events: none;
         }
    </style>
    <script type="text/javascript">
         function deluser(i) {
        	 //用户安全提示
			if(confirm("您确定需要删除吗?")){
				location.href="${pageContext.request.contextPath }/delUserServlet?id="+i;
			}
		}
         
         window.onload=function(){
        	    //给删除选中按钮添加点击事件
        		 document.getElementById("delselcted").onclick=function(){
        		    if(confirm("您确定删除这些选项吗?")){  //在删除前给删除添加保险
        		    	//判断选项中是否有被选上的,如果没有的话不执行删除,否则没有if会造成空指针异常
        		    	var flag =false;
        		    	var cbs=document.getElementsByName("uid");  //获取所有的选项(包括选的,没有选的)
        		    	for(var i=0;i<cbs.length;i++){
        		    		if(cbs[i].checked){  //一旦有被选的项,就停止循环
        		    			flag=true;
        		    			 break;  
        		    		}
        		    	}
        		    	if(flag){//一旦有被选的项,就提交表单
        		    	   document.getElementById("form").submit();  //一旦删除选中,首先创建一个表单,把所有信息提交给delselectedservlet处理
        		    	}
        		    		
        		       
        		    }
        	     }
        	    
        	   //一键全选,一键全不选
        	   //通过id获取第一个全选项
        	   document.getElementById("firstcb").onclick=function(){
        		   var cbs=document.getElementsByName("uid");
        		   //遍历下面所有的选项
        		   for(var i=0;i<cbs.length;i++){
        			     //设置cbs[i].checked的状态与第一个firstcb.checked相同
        			     cbs[i].checked=this.checked;
        		   }
        	   }; 
         }
    </script>
</head>
<body>
<div class="container">
    <h3 style="text-align: center">用户信息列表</h3>
    <div style="float: left;">

        <form class="form-inline" action="${pageContext.request.contextPath }/finduserpageservlet" method="post">
            <div class="form-group">
                <label for="exampleInputName2">姓名</label>
                <input type="text" class="form-control" id="exampleInputName2" name="name" value="${condtion.name[0] }">
            </div>
            <div class="form-group">
                <label for="exampleInputName3">籍贯</label>
                <input type="text" class="form-control" id="exampleInputName3" name="address" value="${condtion.address[0]}">
            </div>

            <div class="form-group">
                <label for="exampleInputEmail2">邮箱</label>
                <input type="email" class="form-control" id="exampleInputEmail2" name="email" value="${condtion.email[0]}">
            </div>
            <button type="submit" class="btn btn-default">查询</button>
        </form>
    </div>
    <div style="float: right; margin: 5px;">    
       <a class="btn btn-primary" href="${pageContext.request.contextPath }/add.jsp">添加联系人</a>
       <a class="btn btn-primary" href="javascript:void(0);" id="delselcted">删除选中</a>  
    </div>
    <%--下面这个form表单是为了提交所有选择的删除项 至delselectedservlet
    至于delselectedservlet怎么获得那个项被选中,可以首先设置表单提交,然后将input中checkbox栏,设name="id"
    使之该id的value=${user.id},最后通过表单提交给了delselectedservlet
     --%>
    <form action="${pageContext.request.contextPath }/delselectedservlet" id="form" method="post">
        <table border="1" class="table table-bordered table-hover">
	        <tr class="success">
	            <th><input type="checkbox" id="firstcb"></th>
	            <th>编号</th>
	            <th>姓名</th>
	            <th>性别</th>
	            <th>年龄</th>
	            <th>籍贯</th>
	            <th>QQ</th>
	            <th>邮箱</th>
	            <th>操作</th>
	        </tr>
	        <c:forEach items="${pb.list}" var="user" varStatus="s">
	               <tr>
	                    <td><input type="checkbox"  name="uid"  value="${user.id}"></td>
			            <td>${s.count+start}</td>
			            <td>${user.name}</td>
			            <td>${user.gender }</td>
			            <td>${user.age }</td>
			            <td>${user.address }</td>
			            <td>${user.qq }</td>
			            <td>${user.email }</td>
			            <td><a class="btn btn-default btn-sm" href="${pageContext.request.contextPath }/queryupdate?id=${user.id}">修改</a>&nbsp;
			                <a class="btn btn-default btn-sm" href="javascript:deluser(${user.id});" >删除</a></td>
	        		</tr>
	        </c:forEach>
	    </table>
    </form>
	    
    
    <div>
    
        <nav aria-label="Page navigation">
            <ul class="pagination">
                <c:if test="${pb.currentPage==1 }">  <%--如果当前按钮为1,应该使他禁止状态 --%>
                     <li class="disabled">
                        <a href="${pageContext.request.contextPath }/finduserpageservlet?currentPage=${pb.currentPage-1}&rows=5&name=${condtion.name[0]}&address=${condtion.address[0]}&email=${condtion.email[0]}" 
                          aria-label="Previous">
                        <span aria-hidden="true">&laquo;</span>
                        </a>
                     </li>
                </c:if>
                <c:if test="${pb.currentPage!=1 }">  <%--如果当前按钮不为1 --%>
                     <li>
                        <a href="${pageContext.request.contextPath }/finduserpageservlet?currentPage=${pb.currentPage-1}&rows=5&name=${condtion.name[0]}&address=${condtion.address[0]}&email=${condtion.email[0]}" 
                           aria-label="Previous">
                        <span aria-hidden="true">&laquo;</span>
                        </a>
                     </li>
                </c:if>
 
                    
                <c:forEach begin="1" end="${pb.totalPage }" step="1" var="i">
                   <c:if test="${pb.currentPage==i }">  <%--如果当前页码与循环体 刚好一致,就处于激活状态 --%>
                       <li class="active"><a href="${pageContext.request.contextPath }/finduserpageservlet?currentPage=${i}&rows=5&name=${condtion.name[0]}&address=${condtion.address[0]}&email=${condtion.email[0]}" >
                          ${i}</a></li>
                   </c:if>
                   <c:if test="${pb.currentPage !=i }">  <%--如果当前页码与循环体 不一致,就处于非激活状态 --%>
                       <li><a href="${pageContext.request.contextPath }/finduserpageservlet?currentPage=${i}&rows=5&name=${condtion.name[0]}&address=${condtion.address[0]}&email=${condtion.email[0]}" >
                          ${i}</a></li>
                   </c:if>
                   
                </c:forEach>
                
               <c:if test="${pb.currentPage==pb.totalPage }">  <%--如果当前按钮为最大页码,应该使他禁止状态 --%>
                     <li class="disabled">
                        <a href="${pageContext.request.contextPath }/finduserpageservlet?currentPage=${pb.currentPage+1}&rows=5&name=${condtion.name[0]}&address=${condtion.address[0]}&email=${condtion.email[0]}"
                          aria-label="Previous" >  <%--而又可以使用css是鼠标处于不可点击状态class="disable" --%>
                        <span aria-hidden="true">&raquo;</span>
                        </a>
                     </li>
                </c:if>
                <c:if test="${pb.currentPage!=pb.totalPage }">  <%--如果当前按钮不为不为最大页码 --%>
                     <li>
                        <a href="${pageContext.request.contextPath }/finduserpageservlet?currentPage=${pb.currentPage+1}&rows=5&name=${condtion.name[0]}&address=${condtion.address[0]}&email=${condtion.email[0]}"
                          aria-label="Previous" >
                        <span aria-hidden="true">&raquo;</span>
                        </a>
                     </li>
                </c:if>
                
                <span style="font-size: 25px;margin-left: 5px;">
                    <c:if test="${pb.totalCount==0 }">共0条记录,共0页</c:if>
                    <c:if test="${pb.totalCount!=0 }">共${pb.totalCount }条记录,共${pb.totalPage }页</c:if>
                </span>
            </ul>
        </nav>
       
    </div>
</div>
</body>
</html>

2.2  delselectedservlet的编写

package web;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import service.USerService;
import service.UserServiceImpl;
@WebServlet("/delselectedservlet")
public class DelSelectedServlet extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		this.doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//1.设置编码
		req.setCharacterEncoding("utf-8");
		//批量选中删除
		//2.获得前端选中的所有删除项的id
		 String[] ids=req.getParameterValues("uid");
		 USerService uSerService=new UserServiceImpl();
		 uSerService.delselecteduser(ids);  //传进去的是id数组
		 
		 //3.跳转到查询所有的用户的jsp页面
		 resp.sendRedirect(req.getContextPath()+"/finduserpageservlet");
	}
	

}

2.3   service层的userServi接口和UserServiceImpl实现类的编写

userServi接口

package service;
//user的业务接口

import java.util.List;
import java.util.Map;

import domain.PageBean;
import domain.User;

public interface USerService {
    //定义业务查询抽象方法
	public List<User> findAll();

	public void addUser(User user);


	public void deluser(String id);

	public User findUserById(String idString);

	public void updateuser(User user);

	public void delselecteduser(String[] ids);  //删除选中用户的抽象方法

	public PageBean<User> findUserByPage(String currentPage, String row, Map<String, String[]> condtion); //模糊的分页查询

	PageBean<User> findUserByPage(String _currentPage, String _row);  //普通的分页查询



	
}

 UserServiceImpl实现类

package service;

import java.util.List;
import java.util.Map;

import dao.UserDao;
import dao.UserDaoImpl;
import domain.PageBean;
import domain.User;

public class UserServiceImpl implements USerService{
    UserDao userDao=new UserDaoImpl();
    @Override
	public List<User> findAll() {
		//调用dao,操作数据库,查询所有的用户
		return userDao.findAll();
	}
    
    public void addUser(User user) {
    	//调用添加用户的方法
    	userDao.addUser(user);
    }

	public void deluser(String id) {
		//删除用户信息
		userDao.deluser(Integer.parseInt(id));   //将参数变为整数
		
	}

	@Override
	public User findUserById(String idString) {
		//通过id来查询需要修改的用户信息	
		return userDao.findUserById(Integer.parseInt(idString));	
	}

	@Override
	public void updateuser(User user) {
		// 根据update.jsp中的用户信息修改数据库的用户信息
		userDao.updateuser(user);		
	}

	@Override
	public void delselecteduser(String[] ids) {
        //批量选中删除
		if(ids!=null&&ids.length>0) {  //判断是否有用户被选中,防止空指针异常
			//批量选中删除
			//根据id数组,删除选中的用户
			for(String id:ids) {//遍历数组
				userDao.deluser(Integer.parseInt(id));  //参数转换integer
			}
		}	
	}
    //模糊的分页查询
	//condtion是模糊查询的条件
	@Override
	public PageBean<User> findUserByPage(String _currentPage, String _row,Map<String, String[]> condtion) {
		// 分页查询 ,根据当前页码和每页个数可以查出,每一页的开始页码
		int currentPage=Integer.parseInt(_currentPage);  //字符串转换整形
		int row=Integer.parseInt(_row);   //字符串转化成整形
		
		//封装对象
		PageBean<User>  pageBean=new PageBean<User>();
		
		//调用userdao接口的方法可以查询总共记录条数
		int total=userDao.totalCount(condtion);
		pageBean.setTotalCount(total);
		
		//获取总共分多少页
	    int pagenumber=(total%row)==0 ? total/row :(total/row)+1;
	    pageBean.setTotalPage(pagenumber);
	    
	    //注意:
		//判断分页按钮到达1和最大页码是应该不能在变化了
		if(currentPage<1) {  //currentPage<0时
			currentPage=1;
		}
		if(currentPage>pagenumber) {
			currentPage=pagenumber;   //currentPage>pagenumber时
		}
		pageBean.setCurrentPage(currentPage);
		pageBean.setRows(row);
		
		//分页查询   首先根据当前页码和每页个数记录计算每页开始的页码
		//获得每页的记录
		int n=(currentPage-1)>=0?(currentPage-1):0;
		int s=n*row;
	    List<User> list =userDao.findByPage(s,row,condtion);
	    pageBean.setList(list);
	    //System.out.println(list);
	    
	    
	    return pageBean;
	}
	@Override
	public PageBean<User> findUserByPage(String _currentPage, String _row) {
		// 分页查询 ,根据当前页码和每页个数可以查出,每一页的开始页码
		int currentPage=Integer.parseInt(_currentPage);  //字符串转换整形
		int row=Integer.parseInt(_row);   //字符串转化成整形
		
		//封装对象
		PageBean<User>  pageBean=new PageBean<User>();
		
		//调用userdao接口的方法可以查询总共记录条数
		int total=userDao.totalCount();
		pageBean.setTotalCount(total);
		
		//获取总共分多少页
	    int pagenumber=(total%row)==0 ? total/row :(total/row)+1;
	    pageBean.setTotalPage(pagenumber);
	    
	    //注意:
		//判断分页按钮到达1和最大页码是应该不能在变化了
		if(currentPage<1) {  //currentPage<0时
			currentPage=1;
		}
		if(currentPage>pagenumber) {
			currentPage=pagenumber;   //currentPage>pagenumber时
		}
		pageBean.setCurrentPage(currentPage);
		pageBean.setRows(row);
		
		//分页查询   首先根据当前页码和每页个数记录计算每页开始的页码
		//获得每页的记录
		int n=(currentPage-1)>=0?(currentPage-1):0;
		int s=n*row;
	    List<User> list =userDao.findByPage(s,row);
	    pageBean.setList(list);
	    //System.out.println(list);
	    
	    
	    return pageBean;
	}
    
    

}

2.4 在Dao层中UserDao接口,UserDaoImpl实现类分别编写deluser抽象方法和deluser具体实现方法。

其实就是调用根据用户id来删除用户的方法

UserDao接口

package dao;

import java.util.List;
import java.util.Map;

import domain.User;

public interface UserDao {
     public List<User> findAll();  //抽象方法
	 public void addUser(User user);
	public void deluser(int id);  //根据整型的id来删除用户
	
	public User findUserById(int parseInt);
	
	public void updateuser(User user);
	
	public int totalCount();  //查询总记录数
	
	public int totalCount(Map<String, String[]> condtion);  //模糊查询总记录数
	
	public List<User> findByPage(int s, int row);  //查询每个分页的记录
	public List<User> findByPage(int s, int row, Map<String, String[]> condtion);  //模糊查询每个页的记录
	
	
 
}

UserDaoImpl实现类

package dao;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.management.Query;
import javax.xml.transform.Templates;

import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

import com.alibaba.druid.sql.dialect.oracle.ast.clause.ModelClause.ReturnRowsClause;

import domain.LoginUser;
import domain.User;
import utils.JDBCUtils;

public class UserDaoImpl implements UserDao{
    JdbcTemplate jdbcTemplate =new JdbcTemplate(JDBCUtils.getDataSource());
	public List<User> findAll() {
		// 操作数据库,查询
		String sql="select * from user";
		List<User> users=jdbcTemplate.query(sql,new BeanPropertyRowMapper<User>(User.class));
		return users;
	}
	public LoginUser checkLoginUser( LoginUser loginUser) {
		//查询登录用户信息
		String sqlString="select* from loginuser where username=? and password=?";
		//System.out.println("111"+loginUser);
		try {
			LoginUser lu=(LoginUser) jdbcTemplate.queryForObject(sqlString, new BeanPropertyRowMapper<LoginUser>(LoginUser.class)
					,loginUser.getUserName(),loginUser.getPassword());
			return lu;
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			return null;
		}	
	}
	
	 public void addUser(User user) {
	    	//调用添加用户的方法,
		    //使用sql语句
		    String sql="insert into user values(null,?,?,?,?,?,?)";
		    jdbcTemplate.update(sql,user.getName(),user.getGender(),user.getAge(),user.getAddress(),
		    		user.getQq(),user.getEmail());
	    	
	    }
	@Override
	public void deluser(int id) {
		 //删除用户信息
		 String sql="delete from user where id=?";
		 jdbcTemplate.update(sql,id);
		
	}
	@Override
	public User findUserById(int parseInt) {
		//根据id查询用户的信息
		String sql="select * from user where id=?";
		User user=jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<User>(User.class),parseInt);
		return user;	
	}
	@Override
	public void updateuser(User user) {
		// 根据update.jsp中的用户信息修改数据库的用户信息
		String sql="update user set name=?,gender=?,age=?,address=?,qq=?,email=? where id=?";
		jdbcTemplate.update(sql,user.getName(),user.getGender(),user.getAge(),user.getAddress(),
				user.getQq(),user.getEmail(),user.getId());		
	}
	@Override
	public int totalCount() {
		// 普通查询数据库所有的记录条数
		String sql="select count(*) from user";
		return  jdbcTemplate.queryForObject(sql, Integer.class);
	}
	
	//模糊查询总记录数
	@Override
	public int totalCount(Map<String, String[]> condtion) {
		//1.定义初始化模板的sql语句
		String sql="select count(*) from user where 1 = 1 ";
		//2.遍历map集合,用stringBuilder存储拼接的sql语句,list存储map的值
		StringBuilder sb=new StringBuilder(sql);
		List<Object> list=new ArrayList<Object>();
		Set<String> key=condtion.keySet();
		//System.out.println(key);
		for(String k:key) {
			//排除分页的currentPage,rows请求的键值
			if("currentPage".equals(k)||"rows".equals(k)) {
				continue;
			}
			//获取value
			String val=condtion.get(k)[0];
			//判断是否有值
			if(val != null&&!"".equals(val)) {//如果有且不能空字符串,则是查询条件,把他存储到list中
				sb.append(" and "+k+" like ? ");  //存储拼接的sql语句
				list.add("%"+val+"%");  //将对应的map值存储到list中,查询的条件值
			}
			
		}
		//System.out.println(sb.toString());
		//System.out.println(list);
		sql=sb.toString();   //重写拼接后的sql
		return  jdbcTemplate.queryForObject(sql, Integer.class,list.toArray());
	}
	
	@Override
	public List<User> findByPage(int s, int row) {
		// 分页查询每个分页的记录
		String sql="select * from user limit ?,?";
		List<User> list=jdbcTemplate.query(sql, new BeanPropertyRowMapper<User>(User.class),s,row);
		return list;
	}
	
	//模糊查询每个页的记录
	@Override
	public List<User> findByPage(int s, int row, Map<String, String[]> condtion) {
		//模糊查询每个页的记录
		String sql="select * from user where 1=1 ";
		//2.遍历map集合,用stringBuilder存储拼接的sql语句,list存储map的值
		StringBuilder sb=new StringBuilder(sql);
	    List<Object> list=new ArrayList<Object>();
		Set<String> key=condtion.keySet();
		//System.out.println(key);
		for(String k:key) {
			//排除分页的currentPage,rows请求的键值
			if("currentPage".equals(k)||"rows".equals(k)) {
				continue;
			}
			//获取value
			String val=condtion.get(k)[0];
			//判断是否有值
			if(val != null&&!"".equals(val)) {//如果有且不能空字符串,则是查询条件,把他存储到list中
				sb.append(" and "+k+" like ? ");  //存储拼接的sql语句
				list.add("%"+val+"%");  //将对应的map值存储到list中,查询的条件值
			}					
		}
		//添加分页的sql语句
		sb.append(" limit ?,? ");  
		//添加分页的参数
		list.add(s);  //添加每页的开始页码
		list.add(row);  //添加每页的记录数
		System.out.println(sb.toString());
		System.out.println(list);
		sql=sb.toString();   //重写拼接后的sql
		
		List<User> users=jdbcTemplate.query(sql, new BeanPropertyRowMapper<User>(User.class),list.toArray());	
		return users;
	}
	
	
}

2.5删除后跳转到重新查询所有用户的servlet

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//1.设置编码
		req.setCharacterEncoding("utf-8");
		//批量选中删除
		//2.获得前端选中的所有删除项的id
		 String[] ids=req.getParameterValues("uid");
		 USerService uSerService=new UserServiceImpl();
		 uSerService.delselecteduser(ids);  //传进去的是id数组
		 
		 //3.跳转到查询所有的用户的jsp页面
		 resp.sendRedirect(req.getContextPath()+"/finduserpageservlet");
	}

至此,删除选中功能功能全部结束

三.其他

一键全选或一键全不选功能实现

在list.jsp页面绑定checkbox一键全选

js处理一键全选,一键全不选

 

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐