个人主页:欢迎访问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
。
在设置数据表结构时,其实里面已经考虑到这问题,预留了一个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;
}
这里的控制主要是实现页面的跳转,实现页面重定向,所以直接使用参数绑定,更新到用户提交页面,在重新提交后,再次回到用户信息页面。
req.setAttribute("user",user);
req.getRequestDispatcher("/user/userUpdate.jsp").forward(req, resp);
@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);
}
在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;
}
在新增用户信息时,我们没有对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
异步请求,对数据进行验证,做到这里,我们的用户模块的所有功能就全部完成,下一篇开始新登录模块的实现。