• 【JAVA项目实战】【图书管理系统】用户更新功能【Servlet】+【Ajax】+【Mysql】


    🚀个人主页:欢迎访问Ali.s的首页

    ⏰ 最近更新:2022年8月5日

    ⛽ Java框架学习系列:【Spring】【SpringMVC】【Mybatis】

    🔥 Java项目实战系列:【飞机大战】【图书管理系统】

    ⛳ Java基础学习系列:【继承】【封装】【多态】

    🏆 通信仿真学习系列:【硬件】【通信】【MATLAB】

    🍄 个人简介:通信工程本硕🌈、Java程序员🚴。目前只会CURD😂

    💌 点赞 👍 收藏 💗留言 💬 都是我最大的动力💯

    在这里插入图片描述


    前言

    这里是【JAVASE】项目实战的第四节课,接着前面的用户删除功能继续完成用户的更新功能,使用【servlet】【Ajax】【Mysql】来实现该功能。


    一、需求分析

    在前面用用户删除功能实现后,可以清楚的看到在前端页面和数据库中都无法看到的用户信息,但是在实际的开发过程中应该是在数据库中保留用户信息,而在前端不显示出用户信息,所以今天将完善一下非真实删除的功能,通过设置字段信息来进行约束,使其达到不删数据也不显示的效果,并且完成用户更新功能。下面对更新的功能进行需求分析。
    在这里插入图片描述
    这里基本逻辑与删除的功能大同小异,最主要的是使用更新操作时,需要有一个Ajax异步数据请求返回,当点击每条数据的更新按钮时,就是用户发送了请求,用户发送请求后controller层的Servlet就应该要处理请求,而根据MVC架构,controller需要调用service层的方法,所以将业务逻辑交给Service层进行处理,service的处理有需要对请求处理的数据与dao层的数据进行比对,dao层访问数据库信息,对请求数据操作进行校验,并对操作返回数据响应。
    在这里插入图片描述
    当从层返回数据后需要页面进行重定向操作,重新跳转到用户信息提交页面,同时将返回数据填到表单中,这里需要使用到Ajax
    在这里插入图片描述

    二、功能实现

    1.非真正删除

    在设置数据表结构时,其实里面已经考虑到这问题,预留了一个is_deleted字段信息,就是用于控制用户信息删除的,当值为1是表示显示在前端页面,而其它值为只保存在数据库中,而不显示在前端页面,所以实际的sql语句中需要加上set is_deleted=?

        @Override
        public Integer delete(Integer id) {
            QueryRunner queryRunner = DBUtils.getQueryRunner();
            //逻辑删除,数据进行保留
            String sql="update t_user set is_deleted=? where id=?";
            try {
                //return queryRunner.update(sql,id);
                //逻辑更新
                return queryRunner.update(sql, DelFlag.YES.code,id);
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return -1;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    2.控制层

    这里的控制主要是实现页面的跳转,实现页面重定向,所以直接使用参数绑定,更新到用户提交页面,在重新提交后,再次回到用户信息页面。

        req.setAttribute("user",user);
     	req.getRequestDispatcher("/user/userUpdate.jsp").forward(req, resp);
    
    • 1
    • 2

    3.业务层

        @Override
        public Integer updateUser(User user) {
            return userDao.update(user);
        }
    
    • 1
    • 2
    • 3
    • 4

    在实现类实现所调用的接口就能完成业务层的处理。

    package com.song.bookmanagersystem.service;
    import com.song.bookmanagersystem.entity.User;
    import java.util.List;
    public interface UserService {
        //业务层删除用户
         Integer updateUser(User user);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    4.持久层

    dao层要完成信息的查库操作,与数据库的信息进行比对,并返回响应的结果,这是删除的操作,所以返回响应的结果是否删除成功,并且要将数据作为返回值进行传递。

    @Override
        public Integer update(User user) {
            QueryRunner queryRunner=DBUtils.getQueryRunner();
            String sql="update t_user set user_name=?,password=?,phone_num=?,email=? where id=?";
            try {
                return queryRunner.update(sql,user.getUserName(),user.getPassword(),user.getPhoneNum(),user.getEmail(),user.getId());
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return -1;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    5.数据验证

    在新增用户信息时,我们没有对id进行设置,而是通过数据库中表的字段自增,所以保证id是唯一的,同样的思路,需要保证账号是唯一的,所以这里做数据验证,无法修改用户账号字段信息,通过Ajax发送异步请求实现提交。

    对用户账号做判断:

     @Override
        public String checkUser(String userName) {
            QueryRunner queryRunner = DBUtils.getQueryRunner();
            String sql="select count(1) from t_user where is_deleted=? and user_name=?";
            try {
               int count= queryRunner.query(sql, new ResultSetHandler<Integer>() {
                    @Override
                    public Integer handle(ResultSet resultSet) throws SQLException {
                        resultSet.next();
                        int count=resultSet.getInt(1);
                        return count;
                    }
                },DelFlag.No.code,userName);
                return count==0 ?"success":"error";
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return "error";
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在这里插入图片描述

    三、功能测试

    启动服务器,让项目在服务器中运行,实现在删除的功能下测试非真正删除,然后在网页上进行更新用户数据的测试。
    在这里插入图片描述
    页面已经不显示id为4的信息,但可以清楚的看到数据库中信息依旧存在,并且is_deleted字段值为0。
    在这里插入图片描述
    在这里插入图片描述
    接下来测试更新用户信息的功能,点击修改按钮后,重新提交用户信息到数据库和前端页面。
    在这里插入图片描述
    页面跳转到更新页面,不显示账号已被注册,所以应该做判断是更新操作还是新增操作。
    在这里插入图片描述
    将信息修改后的用户信息页面
    在这里插入图片描述


    在这里插入图片描述

    总结

    以上就是今天要讲的内容,使用【Servlet】+【Ajax】+【Mysql】对用户删除功能进行完善,发现能在不删除用户的正真数据而达到不显示的效果,同时完成了用户的更新功能,通过Ajax异步请求,对数据进行验证,做到这里,我们的用户模块的所有功能就全部完成,下一篇开始新登录模块的实现。

  • 相关阅读:
    牛客小白月赛60 C 小竹关禁闭(动态规划 01背包)
    父组件调用子组件中的方法(vue2)
    公众号留言板小程序哪个好用?一一列举
    注意力机制原理
    antd vue 自定义侧边栏svg图标、并改变图标颜色
    算法通关村第13关【青铜】| 数字与数学基础问题
    【智慧港口】NTP网络时间服务器助力数字化港口建设
    canvas基础二
    任正非“苹果是华为的老师”;音频编解码标准 L2HC 发布;GNU 和自由软件运动四十周年丨RTE开发者日报 Vol.53
    高防服务器中的秒解服务器什么意思?
  • 原文地址:https://blog.csdn.net/dxcn01/article/details/126172608