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

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异步请求,对数据进行验证,做到这里,我们的用户模块的所有功能就全部完成,下一篇开始新登录模块的实现。

  • 30
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 52
    评论
评论 52
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ali.s

你的鼓励将是我前进的最好动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值