暑期项目实习第五课,用IDEA写个连接Mysql实现第四课【Web】Servlet有条理的实现层次分明的注册及注销 还未实现的查询功能。 由于本Blog为该项目的最终章,所以在代码片段均完整附上所有代码内容。 注:MySql选用8.0.17版本,5.X版本的同学可查阅【MySql】MySql5.0与8.0在连接数据库时候的区别。
本次继续按照此思路,首先建立model层的User类,然后依此完成util层–>dao层–>service层–>servlet层–>jsp层
项目展开目录:
建立与数据库字段一一对应的用户类User,并添加上响应的方法,且应使用private私有属性,保证程序安全性。
package com.zr0629.model; public class User { private int id; private String name; private String password; private String age; //按住键盘上的alt + insert键(或者右键选择Generate) 选择getter and setter public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", password='" + password + '\'' + ", age='" + age + '\'' + '}'; } }在原先dao层基础上,我们添加selectByName方法来实现查询功能。
package com.zr0629.dao; import com.zr0629.model.User; import com.zr0629.util.DBUtil; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class UserDao { //与数据库打交道的Dao层 public int add(User user){ Connection connection = null; PreparedStatement pstmt = null; int count = 0; try{ connection = DBUtil.getConnection(); System.out.println("连接成功"); //获得执行sql的Statement对象 pstmt = connection.prepareStatement("insert into user (name,password,age) values (?,?,?)"); pstmt.setString(1,user.getName()); pstmt.setString(2,user.getPassword()); pstmt.setString(3,user.getAge()); //执行sql,获得结果 count = pstmt.executeUpdate(); System.out.println("insert操作:"+count); return count; }catch (Exception e){ e.printStackTrace(); }finally { try { DBUtil.closeAll(null,pstmt,connection); //由于没有结果集所以第一项为空 } catch (SQLException throwables) { throwables.printStackTrace(); } } return count; } public int del(User user){ Connection connection = null; PreparedStatement pstmt = null; int count = 0; try{ connection = DBUtil.getConnection(); System.out.println("连接成功"); //获得执行sql的Statement对象 pstmt = connection.prepareStatement("DELETE FROM `user` WHERE name=? AND password=? AND age = ?"); pstmt.setString(1,user.getName()); pstmt.setString(2,user.getPassword()); pstmt.setString(3,user.getAge()); //执行sql,获得结果 count = pstmt.executeUpdate(); System.out.println("delete操作:"+count); return count; }catch (Exception e){ e.printStackTrace(); }finally { try { DBUtil.closeAll(null,pstmt,connection); //由于没有结果集所以第一项为空 } catch (SQLException throwables) { throwables.printStackTrace(); } } return count; } public User selectByName(String name){ ResultSet rs = null; Connection conn = null; PreparedStatement pstmt = null; DBUtil util = new DBUtil(); User user = new User(); try { conn = util.getConnection(); pstmt = conn.prepareStatement("select * from user where name = ?"); pstmt.setString(1,name); rs = pstmt.executeQuery(); //处理结果集 while (rs.next()) { user.setId(rs.getInt(1)); user.setName(rs.getString(2)); user.setPassword(rs.getString(3)); user.setAge(rs.getString(4)); } }catch (Exception e){ e.printStackTrace(); }finally { try { util.closeAll(rs,pstmt,conn); } catch (SQLException throwables) { throwables.printStackTrace(); } } return user; } }该层直接与前端界面连接提供前端界面所需要的一切方法。
该方法主要用于第一次使用Servlet,与前端产生一次简单的互动详见:【Web】Servlet简易实现登陆功能。
package com.zr0629.servlet; import javax.servlet.*; import java.io.IOException; public class HelloSevlet implements Servlet { @Override public void init(ServletConfig servletConfig) throws ServletException { } @Override public ServletConfig getServletConfig() { //获得servlet配置的方法 return null; } @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { //实现功能 servletResponse.getWriter().write("hello,servlet"); } @Override public String getServletInfo() { return null; } @Override public void destroy() { //清除相关服务 } }该方法不涉及后端,仅用于简单测试登陆功能,详见:【Web】Servlet简易实现登陆功能,真正实现登陆方法可在AddServlet方法类的查询功能上实现。
package com.zr0629.servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class LoginServlet extends HttpServlet { protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String name = req.getParameter("name"); String password = req.getParameter("password"); if (name.equals("123") && password.equals("123")) { resp.getWriter().write("success!"); } else { resp.getWriter().write("failed!"); } } }由于其他功能均在之前的Blog中演示过,所以这里仅演示查询功能。 主页地址:http://localhost:8081/ 点击查询用户数据并查询所需数据。 点击查询按钮。 可以见到数据库返回给前端界面的数据。