网络知识 娱乐 【JAVA项目实战】【图书管理系统】用户更新功能【Servlet】+【Ajax】+【Mysql】

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

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

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

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

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

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

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

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

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

在这里插入图片描述

文章目录

  • 前言
  • 一、需求分析
  • 二、功能实现
    • 1.非真正删除
    • 2.控制层
    • 3.业务层
    • 4.持久层
    • 5.数据验证
  • 三、功能测试
  • 总结


前言

这里是【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;
    }

2.控制层

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

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

3.业务层

    @Override
    public Integer updateUser(User user) {
        return userDao.update(user);
    }

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

package com.song.bookmanagersystem.service;
import com.song.bookmanagersystem.entity.User;
import java.util.List;
public interface UserService {
    //业务层删除用户
     Integer updateUser(User user);
}

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

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

在这里插入图片描述

三、功能测试

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


在这里插入图片描述

总结

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