1. 程式人生 > 實用技巧 >使用者增刪改查案例

使用者增刪改查案例

需求:

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>&nbsp; <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);
    }
}