与数据库一一对应
lombok生成get set方法
package com.ftzlover.demo.po; import lombok.Getter; import lombok.Setter; @Getter @Setter public class User { private Integer userId; // 用户ID private String uname; // 用户名称 private String upwd; // 用户密码 private String nick; // 用户昵称 private String head; // 用户头像 private String mood; // 用户签名 }
2、创建底层UserDao这里就是所有创建好的层
3、创建UserService(一般都会调用UserDao)private UserDao userDao = new UserDao();
4、写web层UserSrevlet注意:
首先需要写@WebServlet("/user")在顶端,
接下来让其调用service层private UserService userService = new UserService();
然后让后让这个类继承 HttpServlet
public class UserServlet extends HttpServlet {
4.1 重写方法@Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
4.2创建vo层并在里面创建ResultInfo类用于封装返回数据创建状态码code 提示信息 返回对象
@Getter @Setter public class ResultInfo<T> { private Integer code; // 状态码 成功=1,失败=0 private String msg; // 提示信息 private T result; // 返回的对象(字符串、JavaBean、集合、Map等) }
5、开始从Dao开始写Dao层:(数据访问层:数据库中的增删改查操作)通过用户名查询用户对象, 返回用户对象
获取数据库连接
定义sql语句
预编译
设置参数
执行查询,返回结果集
判断并分析结果集
关闭资源
package com.ftzlover.demo.dao; import com.ftzlover.demo.po.User; import com.ftzlover.demo.util.DBUtil; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; /** * Dao层:(数据访问层:数据库中的增删改查操作) * 通过用户名查询用户对象, 返回用户对象 * 1. 获取数据库连接 * 2. 定义sql语句 * 3. 预编译 * 4. 设置参数 * 5. 执行查询,返回结果集 * 6. 判断并分析结果集 * 7. 关闭资源 */ public class UserDao { public User queryUserByName(String userName){ //首先创建对象 User user = null; Connection connection = null; PreparedStatement preparedStatement = null; //预编译对象 ResultSet resultSet = null; try { // 1. 获取数据库连接 connection = DBUtil.getConnetion(); // 2. 定义sql语句 String sql = "select * from tb_user where uname = ?"; // 3. 预编译 preparedStatement = connection.prepareStatement(sql); // 4. 设置参数 preparedStatement.setString(1, userName); // 5. 执行查询,返回结果集 resultSet = preparedStatement.executeQuery(); // 6. 判断并分析结果集 if (resultSet.next()) { user = new User(); user.setUserId(resultSet.getInt("userId")); user.setUname(userName); user.setHead(resultSet.getString("head")); user.setMood(resultSet.getString("mood")); user.setNick(resultSet.getString("nick")); user.setUpwd(resultSet.getString("upwd")); } } catch (Exception e) { e.printStackTrace(); } finally { // 7. 关闭资源 DBUtil.close(resultSet,preparedStatement,connection); } return user; } }
6、开始写service层package com.ftzlover.demo.service; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.digest.DigestUtil; import com.ftzlover.demo.dao.UserDao; import com.ftzlover.demo.po.User; import com.ftzlover.demo.vo.ResultInfo; /*Service层:(业务逻辑层:参数判断、业务逻辑处理) 1. 判断参数是否为空 如果为空 设置ResultInfo对象的状态码和提示信息 返回resultInfo对象 2. 如果不为空,通过用户名查询用户对象 3. 判断用户对象是否为空 如果为空 设置ResultInfo对象的状态码和提示信息 返回resultInfo对象 4. 如果用户对象不为空,将数据库中查询到的用户对象的密码与前台传递的密码作比较 (将密码加密后再比较) 如果密码不正确 设置ResultInfo对象的状态码和提示信息 返回resultInfo对象 5. 如果密码正确 设置ResultInfo对象的状态码和提示信息 6. 返回resultInfo对象 */ public class UserService { private UserDao userDao = new UserDao(); public ResultInfo<User> userLogin(String userName,String userPwd){ ResultInfo<User> resultInfo = new ResultInfo<>(); // 数据回显:当登录实现时,将登录信息返回给页面显示 User u = new User(); u.setUname(userName); u.setUpwd(userPwd); // 设置到resultInfo对象中 resultInfo.setResult(u); // 1. 判断参数是否为空 if (StrUtil.isBlank(userName) || StrUtil.isBlank(userPwd)) { // 如果为空 设置ResultInfo对象的状态码和提示信息 resultInfo.setCode(0); resultInfo.setMsg("用户姓名或密码不能为空!"); // 返回resultInfo对象 return resultInfo; } // 2. 如果不为空,通过用户名查询用户对象 User user = userDao.queryUserByName(userName); // 3. 判断用户对象是否为空 if (user == null) { // 如果为空,设置ResultInfo对象的状态码和提示信息 resultInfo.setCode(0); resultInfo.setMsg("该用户不存在!"); // 返回resultInfo对象 return resultInfo; } // 4. 如果用户对象不为空,将数据库中查询到的用户对象的密码与前台传递的密码作比较 (将密码加密后再比较) // 将前台传递的密码按照MD5算法的方式加密 userPwd = DigestUtil.md5Hex(userPwd); // 判断加密后的密码是否与数据库中的一致 if (!userPwd.equals(user.getUpwd())) { // 如果密码不正确 resultInfo.setCode(0); resultInfo.setMsg("用户密码不正确!"); return resultInfo; } resultInfo.setCode(1); resultInfo.setResult(user); return resultInfo; } }
7、编写最后的Servelt层7.1 用户登陆