博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于jsp+servlet图书管理系统之后台用户信息删除操作
阅读量:5816 次
发布时间:2019-06-18

本文共 13262 字,大约阅读时间需要 44 分钟。

上一篇的博客写的是修改操作,且附有源码和数据库,这篇博客写的是删除操作,附有从头至尾写的代码(详细的注释)和数据库!

  此次删除操作的源码和数据库:


 自此,基于jsp+servlet开发的用户信息增删该查已经全部写完了,上面的链接是全部的代码,包含增删该查和数据库。

  注意点:

    1:删除操作使用的是伪删除。即只是不在页面显示了,但是还保存在数据库。

    2:分页查询使用的是一个小工具,后面有时间把这些很实用的小工具详细介绍一下。

    3:在提交的表单和后台数据交互的时候使用了一个封装好的小工具。后面有时间介绍。


下面先将删除操作的流程过一遍:

  1:执行伪删除操作的流程:

    1.1:点击删除按钮就是这一句话,提交到system/userinfodelete这个路径的servlet层,注意是doSet()方法。

      <d:column href="system/userinfodelete" value="删除" title="删除"

        paramId="userId" paramProperty="userId">

      </d:column>

           1.2:执行到servlet  层之后调用service业务逻辑层伪删除方法。

       UserInfoService service=new UserInfoServiceImpl();

            //调用业务逻辑层的删除方法
            boolean mark=service.deleteUser(user);  

    1.3:service层(业务逻辑层)调用工具类的公共方法,

      (由于修改和插入可以提取公共的方法,这里做的伪删除其实就是修改也可以使用工具类)

      int count=DbUtils.addAndUpdate(sql, list.toArray());

            1.4:执行工具类之后又返回到service层(业务逻辑层)

      return ps.executeUpdate();

    1.5:业务逻辑层又返回true或者false,返回到servlet层。

      int count=DbUtils.addAndUpdate(sql, list.toArray());

              if(count>0){
                  return true;
              }else{
                  return false;
              }

    1.6:执行servlet层之后之后转发到user_info.jsp页面,并且提示信息

        boolean mark=service.deleteUser(user);

          if(mark){
               request.setAttribute("info", "用户信息删除成功");
           }else{
              request.setAttribute("info", "用户信息删除失败");
           }
           request.getRequestDispatcher("/view/system/userinfo/user_info.jsp").forward(request, response);
        1.7:执行到user_info.jsp页面之后又转到system/userinfoselect这个servlet层。

      window.location="system/userinfoselect";

    1.8:转到servlet层之后又转发到userinfo_list.jsp页面。显示当前删除之后的信息。   

      request.getRequestDispatcher("/view/system/userinfo/userinfo_list.jsp").forward(request, response);

      至此删除信息已经完成了,不过需要注意的是删除操作到了上面1.8这个步奏的时候执行select语句很特殊,需要注意

    StringBuffer sql=new StringBuffer("select * from user_info where user_mark!=-1 ");

    即做了标识,-1作为伪删除的,所以查询出!=-1的信息,但是数据库里面的信息还是存在的。


 

下面将重要的代码按照流程写一下:

  1:点击删除按钮,即下面此页面的代码。

1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2     pageEncoding="UTF-8"%> 3 <% 4     //获取绝对路径路径  5     String path = request.getContextPath(); 6     String basePath = request.getScheme() + "://" 7                 + request.getServerName() + ":" + request.getServerPort() 8                 + path + "/"; 9 %> 10 <%@ taglib prefix="d" uri="http://displaytag.sf.net"%>11 12 13 14 15 
16
17 用户管理-用户查询18
19 20 22 23 24
25
30
31
32
33
34
35
36
37
38
43
44
添加用户46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 65

  2:之后就到了删除的servlet层。

1 package com.bie.system.servlet; 2  3 import java.io.IOException; 4  5 import javax.servlet.ServletException; 6 import javax.servlet.annotation.WebServlet; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse;10 11 import com.bie.po.UserInfo;12 import com.bie.system.service.UserInfoService;13 import com.bie.system.service.impl.UserInfoServiceImpl;14 import com.my.web.servlet.RequestBeanUtils;15 16 @WebServlet("/system/userinfodelete")17 public class UserInfoDeleteServlet extends HttpServlet{18 19     private static final long serialVersionUID = 1L;20 21     @Override22     protected void doGet(HttpServletRequest request, HttpServletResponse response) 23             throws ServletException, IOException {24         //将表单提交的数据封装到javabean中的用户信息表中25         UserInfo user=RequestBeanUtils.requestToSimpleBean(request, UserInfo.class);26         UserInfoService service=new UserInfoServiceImpl();27         //调用业务逻辑层的删除方法28         boolean mark=service.deleteUser(user);29         if(mark){30             request.setAttribute("info", "用户信息删除成功");31         }else{32             request.setAttribute("info", "用户信息删除失败");33         }34         request.getRequestDispatcher("/view/system/userinfo/user_info.jsp").forward(request, response);35     }36     37     38     39 }

   3:执行删除的servlet层之后调用service层(业务逻辑层)的伪删除方法

1 package com.bie.system.service.impl;  2   3 import java.util.ArrayList;  4 import java.util.List;  5   6 import com.bie.po.UserInfo;  7 import com.bie.system.dao.UserInfoDao;  8 import com.bie.system.dao.impl.UserInfoDaoImpl;  9 import com.bie.system.service.UserInfoService; 10 import com.bie.utils.DbUtils; 11 import com.bie.utils.MarkUtils; 12 /*** 13  * 1.4:这是业务逻辑层的实现类,实现用户信息的接口 14  *  15  * 切忌新手写好service业务逻辑层需要test测试(junit) 16  * @author biehongli 17  * 18  */ 19 public class UserInfoServiceImpl implements UserInfoService{ 20  21     private UserInfoDao dao=new UserInfoDaoImpl(); 22     @Override 23     public boolean insertUser(UserInfo user) { 24         try{ 25             //System.out.println(user);//测试传来的UserInfo里面是否够存在用户信息 26             if(user!=null && user.getUserAccount()!=null){ 27                 String sql="INSERT INTO user_info(user_account,user_pw," 28                         + "user_number,user_name,user_age,user_sex,user_mark)" 29                         + " VALUES(?,?,?,?,?,?,?)"; 30                 List list=new ArrayList(); 31                 //可以理解位将实体类中get到的信息放到数据库中,因为set设置的信息就是为了查到数据库中 32                 list.add(user.getUserAccount());//将设置好的账号信息保存到集合中 33                 list.add(user.getUserPw());//将设置好的账号信息保存到集合中 34                 list.add(user.getUserNumber());//将设置好的密码信息保存到集合中 35                 list.add(user.getUserName());//将设置好的姓名信息保存到集合中 36                 list.add(user.getUserAge());//将设置好的年龄信息保存到集合中 37                 list.add(user.getUserSex());//将设置好的性别信息保存到集合中 38                 //list.add(user.getUserMark());//将设置好的标识信息保存到集合中 39                 //后台只可以添加管理员 40                 user.setUserMark(MarkUtils.USER_MARK_MANAGER); 41                 //将设置为默认的管理员添加到数据库 42                 list.add(user.getUserMark()); 43                  44                 //将封装到集合list中的信息和sql语句传递到DbUtils封装好的 方法中 45                 //这里sql转化位String语句,list转化位数组类型 46                 int count=DbUtils.addAndUpdate(sql.toString(), list.toArray()); 47                 //System.out.println(count);//测试返回值是0还是1 48                 if(count>0){ 49                     return true;//成功返回true 50                 }else{ 51                     return false;//失败返回false 52                 } 53             } 54         }catch(Exception e){ 55             e.printStackTrace(); 56         } 57         return false; 58     } 59  60     @Override 61     public List
selectUser(UserInfo user) { 62 //使用StringBuffer进行字符串的拼接,不使用String 63 //StringBuffer sql=new StringBuffer("select * from user_info where 1=1 "); 64 StringBuffer sql=new StringBuffer("select * from user_info where user_mark!=-1 "); 65 //设置集合,用户存放用户信息设置值的时候使用 66 List
list=null; 67 //判断用户的信息不为空的时候 68 if(user!=null){ 69 list=new ArrayList(); 70 //按照账号查询,如果账号不为null且不为空 71 if(user.getUserAccount()!=null && !user.getUserAccount().equals("")){ 72 sql.append(" and user_account=?"); 73 list.add(user.getUserAccount()); 74 } 75 //按照姓名查询,如果姓名不为null且不为空 76 if(user.getUserName()!=null && !user.getUserName().equals("")){ 77 sql.append(" and user_name like ?"); 78 //模糊查询这样拼接字符串 79 list.add("%"+user.getUserName()+"%"); 80 } 81 //按照标识查询,如果标识不为null且不为空 82 if(user.getUserMark()!=null && !user.getUserMark().equals("")){ 83 sql.append(" and user_mark=?"); 84 list.add(user.getUserMark()); 85 } 86 } 87 88 sql.append(" order by user_id desc"); 89 //返回的参数,sql语句是字符类型,集合转化为数组类型 90 return dao.selectUser(sql.toString(), list.toArray()); 91 } 92 93 @Override 94 public boolean updateUser(UserInfo user) { 95 try{ 96 if(user!=null && user.getUserId()!=null){ 97 //更新的sql语句 98 String sql="UPDATE user_info SET user_account=?," 99 + "user_pw=?,user_number=?,user_name=?,"100 + "user_age=?,user_sex=? WHERE user_id=?";101 List list=new ArrayList();102 //添加到集合中的顺序必须和上面些的字段一致,不然报错103 list.add(user.getUserAccount());104 list.add(user.getUserPw());105 list.add(user.getUserNumber());106 list.add(user.getUserName());107 list.add(user.getUserAge());108 list.add(user.getUserSex());109 list.add(user.getUserId());110 111 //添加和修改(伪删除)都可以调用工具类里面公共的方法。112 int count=DbUtils.addAndUpdate(sql, list.toArray());113 if(count>0){114 return true;115 }else{116 return false;117 }118 }119 }catch(Exception e){120 e.printStackTrace();121 }122 return false;123 }124 125 @Override126 public UserInfo getUser(UserInfo user) {127 //判断用户信息和id编号是否为空128 if(user!=null && user.getUserId()!=null){129 return dao.getUser(user.getUserId());130 }131 return null;132 }133 134 @Override135 public boolean deleteUser(UserInfo user) {136 try{137 String sql="update user_info set user_mark=? where user_id=?";138 List list=new ArrayList();139 //直接给user_mark设置为-1,查询的时候加上等于-1的不显示,即在页面就无法显示了140 list.add(MarkUtils.USER_MARK_DEL);141 list.add(user.getUserId());142 int count=DbUtils.addAndUpdate(sql, list.toArray());143 if(count>0){144 return true;145 }else{146 return false;147 }148 }catch(Exception e){149 e.printStackTrace();150 }151 return false;152 }153 154 155 }

  4:执行service业务逻辑层之后调用工具类

1 package com.bie.utils;  2   3 import java.sql.Connection;  4 import java.sql.DriverManager;  5 import java.sql.PreparedStatement;  6 import java.sql.ResultSet;  7 import java.util.ResourceBundle;  8   9 /*** 10  * 1.1:写DbUtils的工具类 11  * :utils是工具类,方便以后调用 12  * 在main方法测试的时候出现一个错误, 13  * 瞄了一眼立马想到了没有添加mysql的驱动, 14  * 所以我感觉测试还是很有必要的 15  * @author biehongli 16  * 17  */ 18 public class DbUtils { 19  20     private static String drivername;//数据库驱动,为了加载数据库驱动 21     private static String url;//数据库连接字符串,只要是找到自己的数据库,需要和自己的数据库一致 22     private static String user;//数据库账号,需要和自己的一致 23     private static String password;//数据库密码,需要和自己的一致 24      25     static{ 26         drivername=ResourceBundle.getBundle("db").getString("drivername"); 27         url=ResourceBundle.getBundle("db").getString("url"); 28         user=ResourceBundle.getBundle("db").getString("user"); 29         password=ResourceBundle.getBundle("db").getString("password"); 30     } 31      32     /*** 33      * 加载数据库驱动和连接到数据库,我一般是加载和连接的时候分别输出,可以快速找到哪里出错 34      * @return 35      * @throws Exception 36      */ 37     public static Connection getCon() throws Exception{ 38         Class.forName(drivername);//记载数据库驱动 39         System.out.println("测试加载数据库驱动"); 40         //连接到数据库 41         Connection con=DriverManager.getConnection(url, user, password); 42         System.out.println("测试连接到数据库"); 43         return con; 44     } 45      46     /*** 47      * 这个用来判断关闭数据库的方法 48      * @param con 关闭Connection的连接 49      * @param ps  关闭PreparedStatement 50      * @param rs  关闭ResultSet 51      */ 52     public static void getClose(Connection con,PreparedStatement ps,ResultSet rs){ 53         //关闭数据库,注意关闭的顺序。养成好习惯 54         try{ 55             if(rs!=null){ 56                 rs.close(); 57             } 58             if(ps!=null){ 59                 ps.close(); 60             } 61             if(con!=null){ 62                 con.close(); 63             } 64         }catch(Exception e){ 65             e.printStackTrace(); 66         } 67     } 68      69     /*** 70      * 添加(插入)和更新(更改)可以提取公共的方法写在工具类中 71      * 删除一般使用伪删除,这样删除就是更新(更改)操作, 72      * 所以只有查询(查找)需要写更多的代码 73      * @param sql 外面传来的sql语句 74      * @param arr 外面传来的数组类型的,是用户信息封装到集合传递进来 75      * @return 返回的是一个整形的数据类型 76      */ 77     public static int addAndUpdate(String sql,Object[] arr){ 78         Connection con=null; 79         PreparedStatement ps=null; 80         try{ 81             con=DbUtils.getCon();//第一步连接数据库 82             ps=con.prepareStatement(sql);//第二步预编译 83             //第三步给sql语句中的参数复制 84             for(int i=0;i

   5:执行工具类之后返回到service层(业务逻辑层),service层(业务逻辑层)返回到servlet层,删除的servlet层,删除的servlet层到提示信息层,提示信息层到查询的servlet层,查询的servlet层执行service层(业务逻辑层),service层(业务逻辑层)调用用户信息的dao层(数据交互层),dao层返回到service层(业务逻辑层),service层(业务逻辑层)返回到查询的servlet层,servlet层转发到userinfo_list.jsp这个显示用户信息的页面。至此伪删除操作全部完成,希望看到这个博客的明白这个执行的流程,思路明白,代码会写,这样就ok了。


 最后将演示的效果展示一下:

打开用户信息的页面:

点击删除之后查看第一行已经消失咯哦:

至此使用jsp+servlet完成用户信息的增删改查已经完结了,希望对大家有所帮助。后面会继续写图书的增删改查,但是图书的增删改查的代码和流程不再叙述,因为只是字段不一致而已,将介绍使用的小工具的具体用法,当写借书的时候再将用户借书的代码分享出来,那么整个合起来就完成了简易的图书管理系统。(每次代码的分享都是在原有基础上不断的增加,所以最后的代码分享肯定比开始的代码分享复杂合完整。)

转载地址:http://tuhbx.baihongyu.com/

你可能感兴趣的文章
vSphere 6将于2月2日全球同步发表
查看>>
Android状态栏实现沉浸式模式
查看>>
让你的APP实现即时聊天功能
查看>>
iOS 绝对路径和相对路径
查看>>
使用Openfiler搭建ISCSI网络存储
查看>>
IntPtr 转 string
查看>>
学生名单
查看>>
(转) 多模态机器翻译
查看>>
【官方文档】Nginx负载均衡学习笔记(三) TCP和UDP负载平衡官方参考文档
查看>>
矩阵常用归一化
查看>>
Oracle常用函数总结
查看>>
【聚能聊有奖话题】Boring隧道掘进机完成首段挖掘,离未来交通还有多远?
查看>>
USNews大学排名遭美国计算机研究学会怒怼,指排名荒谬要求撤回
查看>>
七大关键数据 移动安全迎来历史转折点
查看>>
盘点物联网网关现有联网技术及应用场景
查看>>
mui 总结2--新建第一个app项目
查看>>
nginx的lua api
查看>>
考研太苦逼没坚持下来!看苑老师视频有点上头
查看>>
HCNA——RIP的路由汇总
查看>>
zabbix监控php状态(四)
查看>>