使用者增刪改查案例
阿新 • • 發佈:2020-09-09
需求:
1 前端介面
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <% request.getSession().setAttribute("num", 0); %> <html> <head> <title>$Title$</title> </head> <body> <a href="/user">查詢所有的使用者</a> </body> </html>
list.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <!DOCTYPE html> <!-- 網頁使用的語言 --> <html lang="zh-CN"> <head> <!-- 指定字符集 --> <meta charset="utf-8"> <!-- 使用Edge最新的瀏覽器的渲染方式 --> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <!-- viewport視口:網頁可以根據設定的寬度自動進行適配,在瀏覽器的內部虛擬一個容器,容器的寬度與裝置的寬度相同。 width: 預設寬度與裝置的寬度相同 initial-scale: 初始的縮放比,為1:1 --> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- 上述3個meta標籤*必須*放在最前面,任何其他內容都*必須*跟隨其後! --> <title>Bootstrap模板</title> <!-- 1. 匯入CSS的全域性樣式 --> <link href="css/bootstrap.min.css" rel="stylesheet"> <!-- 2. jQuery匯入,建議使用1.9以上的版本 --> <script src="js/jquery-2.1.0.min.js"></script> <!-- 3. 匯入bootstrap的js檔案 --> <script src="js/bootstrap.min.js"></script> <style type="text/css"> td, th { text-align: center; } </style> </head> <body> <div class="container"> <h3 style="text-align: center">顯示所有使用者</h3> <table border="1" class="table table-bordered table-hover"> <tr class="success"> <th>編號</th> <th>姓名</th> <th>性別</th> <th>年齡</th> <th>籍貫</th> <th>QQ</th> <th>郵箱</th> <th>操作</th> </tr> <c:forEach items="${users}" var="user" > <tr> <td>${user.id}</td> <td>${user.name}</td> <td>${user.sex}</td> <td>${user.age}</td> <td>${user.address}</td> <td>${user.qq}</td> <td>${user.email}</td> <td><a class="btn btn-default btn-sm" href="/update.jsp?id=${user.id}">修改</a> <a class="btn btn-default btn-sm" href="/user?id=${user.id}" onclick="f()">刪除</a></td> </tr> </c:forEach> <tr> <td colspan="8" align="center"><a class="btn btn-primary" href="${pageContext.request.contextPath }/add.jsp">新增使用者</a></td> </tr> </table> </div> </body> <script> function f() { <% request.getSession().setAttribute("num", 2); %> } </script> </html>
add.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <% request.getSession().setAttribute("num", 1); %> <!-- HTML5文件--> <!DOCTYPE html> <!-- 網頁使用的語言 --> <html lang="zh-CN"> <head> <!-- 指定字符集 --> <meta charset="utf-8"> <!-- 使用Edge最新的瀏覽器的渲染方式 --> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <!-- viewport視口:網頁可以根據設定的寬度自動進行適配,在瀏覽器的內部虛擬一個容器,容器的寬度與裝置的寬度相同。 width: 預設寬度與裝置的寬度相同 initial-scale: 初始的縮放比,為1:1 --> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- 上述3個meta標籤*必須*放在最前面,任何其他內容都*必須*跟隨其後! --> <title>新增使用者</title> <!-- 1. 匯入CSS的全域性樣式 --> <link href="css/bootstrap.min.css" rel="stylesheet"> <!-- 2. jQuery匯入,建議使用1.9以上的版本 --> <script src="js/jquery-2.1.0.min.js"></script> <!-- 3. 匯入bootstrap的js檔案 --> <script src="js/bootstrap.min.js"></script> </head> <body> <div class="container"> <center><h3>新增使用者頁面</h3></center> <form action="/user" method="get"> <div class="form-group"> <label for="name">姓名:</label> <input type="text" class="form-control" id="name" name="name" placeholder="請輸入姓名"> </div> <div class="form-group"> <label>性別:</label> <input type="radio" name="sex" value="男" checked="checked"/>男 <input type="radio" name="sex" value="女"/>女 </div> <div class="form-group"> <label for="age">年齡:</label> <input type="text" class="form-control" id="age" name="age" placeholder="請輸入年齡"> </div> <div class="form-group"> <label for="address">籍貫:</label> <select name="address" class="form-control" id="jiguan"> <option value="廣東">廣東</option> <option value="廣西">廣西</option> <option value="湖南">湖南</option> </select> </div> <div class="form-group"> <label for="qq">QQ:</label> <input type="text" class="form-control" name="qq" placeholder="請輸入QQ號碼"/> </div> <div class="form-group"> <label for="email">Email:</label> <input type="text" class="form-control" name="email" placeholder="請輸入郵箱地址"/> </div> <div class="form-group" style="text-align: center"> <input class="btn btn-primary" type="submit" value="提交"/> <input class="btn btn-default" type="reset" value="重置" onclick="f(this)"/> <input class="btn btn-default" type="button" value="返回" onclick="f2()"/> </div> </form> </div> </body> </html> <script> function f(obj) { obj.action = "/add.jsp?time="+new Date().getMilliseconds(); } function f2() { history.back() } </script>
update.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; String id = request.getParameter("id"); int iD = Integer.parseInt(id); HttpSession session1 = request.getSession(); session1.setAttribute("id", iD); %> <% request.getSession().setAttribute("num", 3); %> <!DOCTYPE html> <!-- 網頁使用的語言 --> <html lang="zh-CN"> <head> <base href="<%=basePath%>"/> <!-- 指定字符集 --> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>修改使用者</title> <link href="css/bootstrap.min.css" rel="stylesheet"> <script src="js/jquery-2.1.0.min.js"></script> <script src="js/bootstrap.min.js"></script> </head> <body> <div class="container" style="width: 400px;"> <h3 style="text-align: center;">修改使用者</h3> <form action="/user" method="get"> <div class="form-group"> <label for="name">姓名:</label> <input type="text" class="form-control" id="name" name="name" placeholder="請輸入姓名"/> </div> <div class="form-group"> <label>性別:</label> <input type="radio" name="sex" value="男"/>男 <input type="radio" name="sex" value="女"/>女 </div> <div class="form-group"> <label for="age">年齡:</label> <input type="text" class="form-control" id="age" name="age" placeholder="請輸入年齡"/> </div> <div class="form-group"> <label for="address">籍貫:</label> <select name="address" class="form-control"> <option value="廣東">廣東</option> <option value="廣西">廣西</option> <option value="湖南">湖南</option> </select> </div> <div class="form-group"> <label for="qq">QQ:</label> <input type="text" class="form-control" name="qq" placeholder="請輸入QQ號碼"/> </div> <div class="form-group"> <label for="email">Email:</label> <input type="text" class="form-control" name="email" placeholder="請輸入郵箱地址"/> </div> <div class="form-group" style="text-align: center"> <input class="btn btn-primary" type="submit" value="提交"/> <input class="btn btn-default" type="reset" value="重置" onclick="f(this)"/> <input class="btn btn-default" type="button" value="返回" onclick="f2()"/> </div> </form> </div> </body> </html> <script> function f(obj) { obj.action = "/add.jsp?time="+new Date().getMilliseconds(); } function f2() { history.back() } </script>
2 柵包
3 工具包utils
package com.zl.utils; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource; import java.io.InputStream; import java.sql.*; import java.util.Properties; public class JDBCUtils { //修改工具類,得到連線方法,來自連線池 private static DataSource dataSource;//null public static DataSource getDataSource() { return dataSource; } static { try { //讀取配置檔案資訊,類載入器,讀取配置檔案src資料夾下的檔案這個資源作為流 Properties properties = new Properties(); InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"); properties.load(is); dataSource = DruidDataSourceFactory.createDataSource(properties); } catch (Exception e) { e.printStackTrace(); } } public static final Connection getConnection(){ try { Connection connection = dataSource.getConnection(); return connection; } catch (Exception e) { e.printStackTrace(); } return null; } public static final void close(ResultSet resultSet, Statement statement, Connection connection) { if (resultSet!=null){ try { resultSet.close(); } catch (SQLException e) { e.printStackTrace(); } } if (statement!=null){ try { statement.close(); } catch (SQLException e) { e.printStackTrace(); } } if (connection!=null){ try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
4 使用者包bean
package com.zl.bean; import java.io.Serializable; public class User implements Serializable { private int id; private String name; private String sex; private int age; private String address; private String qq; private String email; public User() { } public User(int id, String name, String sex, int age, String address, String qq, String email) { this.id = id; this.name = name; this.sex = sex; this.age = age; this.address = address; this.qq = qq; this.email = email; } 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 getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getQq() { return qq; } public void setQq(String qq) { this.qq = qq; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } @Override public String toString() { return "Contact{" + "id=" + id + ", name='" + name + '\'' + ", sex='" + sex + '\'' + ", age=" + age + ", address='" + address + '\'' + ", qq='" + qq + '\'' + ", email='" + email + '\'' + '}'; } }
package com.zl.bean; import java.io.Serializable; public class User2 implements Serializable { private String name; private String sex; private int age; private String address; private String qq; private String email; public User2() { } public User2(String name, String sex, int age, String address, String qq, String email) { this.name = name; this.sex = sex; this.age = age; this.address = address; this.qq = qq; this.email = email; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getQq() { return qq; } public void setQq(String qq) { this.qq = qq; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } @Override public String toString() { return "User2{" + "name='" + name + '\'' + ", sex='" + sex + '\'' + ", age=" + age + ", address='" + address + '\'' + ", qq='" + qq + '\'' + ", email='" + email + '\'' + '}'; } }
5 配置檔案
方法
用三層架構解決:高內聚,低耦合
web層,servlet控制層
package com.zl.web; import com.zl.bean.User; import com.zl.bean.User2; import com.zl.service.UserService; import com.zl.utils.JDBCUtils; import org.apache.commons.beanutils.BeanUtils; import org.springframework.jdbc.core.JdbcTemplate; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; import java.util.List; import java.util.Map; @WebServlet("/user") public class UserServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); UserService userService = new UserService(); int num = (int) request.getSession().getAttribute("num"); switch (num) { case 0://查詢 try { List<User> users = userService.findAll(); request.setAttribute("users", users); request.getRequestDispatcher("list.jsp").forward(request, response); } catch (Exception e) { e.printStackTrace(); } break; case 1://增加 Map<String, ?> map = request.getParameterMap(); User2 user2 = new User2(); try { BeanUtils.populate(user2, map); userService.add(user2); } catch (Exception e) { e.printStackTrace(); } break; case 2://刪除 String id = request.getParameter("id"); int iD = Integer.parseInt(id); //id要不要轉為int型別 try { userService.delete(iD); } catch (Exception e) { e.printStackTrace(); } break; case 3://更改 HttpSession session = request.getSession(); int id2 = (int) session.getAttribute("id"); Map<String, ?> map2 = request.getParameterMap(); User2 user22 = new User2(); try { BeanUtils.populate(user22, map2); userService.update(user22,id2); } catch (Exception e) { e.printStackTrace(); } break; default: break; } } }
service層,服務層,業務層
package com.zl.service; import com.zl.bean.User; import com.zl.bean.User2; import com.zl.dao.UserDao; import java.util.List; public class UserService { UserDao userDao = new UserDao(); public List<User> findAll() throws Exception { List<User> users = userDao.findAll(); return users; } public void add(User2 user2) { userDao.add(user2); } public void delete(int iD) { userDao.delete(iD); } public void update(User2 user22, int id2) { userDao.update(user22,id2); } }
dao層,資料訪問層,持久層
package com.zl.dao; import com.zl.bean.User; import com.zl.bean.User2; import com.zl.utils.JDBCUtils; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate; import java.util.List; public class UserDao { JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource()); public List<User> findAll() throws Exception{ List<User> users = jdbcTemplate.query("select * from user", new BeanPropertyRowMapper<>(User.class)); return users; } public void add(User2 user2) { jdbcTemplate.update("insert into user values (null,?,?,?,?,?,?)", user2.getName(), user2.getSex(), user2.getAge(), user2.getAddress(), user2.getQq(), user2.getEmail()); } public void delete(int iD) { jdbcTemplate.update("delete from user where id=?", iD); } public void update(User2 user22, int id2) { jdbcTemplate.update("update user set name=?,sex=?,age=?,address=?,qq=?,email=? where id=?", user22.getName(), user22.getSex(), user22.getAge(), user22.getAddress(), user22.getQq(), user22.getEmail(), id2); } }