修改密码功能实现
实现任何一个功能,按照逻辑来看,是控制层调取业务层,业务层处理逻辑,调取DAO层连接数据库处理请求内容。因此,从业务层最基础写起,方法写好后,去上一层调用,进行测试。
(一)DAO层编写:
①在UserDao接口中添加方法
//修改当前用户密码
public int updatePwd(Connection connection,String id,String password) throws SQLException;
②实现类UserDaoImpl.java中具体写出具体SQL操作
在业务层中不用担心这些参数来源,在公共类中已经处理了相关参数来源
public int updatePwd(Connection connection, String username, String password) throws SQLException {
PreparedStatement pstm = null;
int results = 0;
if(connection!=null){
String sql = "update smbms_user set userPassword=? where userCode=?";
Object params[] = {
password,username};
results = BaseDao.excute(connection,sql,params,pstm);
BaseDao.close(connection,pstm,null);
}
return results;
}
这样Dao层已经执行了相关SQL并且查询出相关数据,注意这里的SQL语句,一定要写对,数据库名、字段名不要拼错,
方法最终返回的是一个int数值,代表执行成功了多少条【这里注意,只有Query方法会返回一个结果集,增删改都是返回条数】
(二) 业务层编写
同样,业务层先去UserService接口中定义方法:
public boolean updatePwd(String uesrcode, String password) throws SQLException;
再去实现类UserService.java中实现具体方法:
public boolean updatePwd(String uesrcode, String password){
Connection connection = null ;
boolean flag = false ;
connection = BaseDao.getConnection();
try {
if(userDao.updatePwd(connection,uesrcode,password)>0){
flag = true;
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
BaseDao.close(connection,null,null);
}
return flag;
}
注意,这里的代码中,不再将查询结果传递,而是根据DAO层传回的int值大小判断,用flag值来判断是否执行,记得关闭连接
(三)控制层UserServlet的编写
注意!这里编写的Servlet采用了复用的方式,否则后续功能扩建需要建太多的servlet文件:
package com.wang.servlet.user;
import com.mysql.jdbc.StringUtils;
import com.wang.pojo.User;
import com.wang.service.user.UserService;
import com.wang.service.user.UserServiceImpl;
import com.wang.util.Constants;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;
//如何实现servlet复用
public class UserServlet extends HttpServlet {
@Override