【Java Web】9、CRUD

CRUD

J2EE CRUD

JavaWeb 入门首例,实现增加、删除、修改和查询功能。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MqGRAEEF-1642060823141)(http://47.107.171.232/easily-j/images/20190310/7fdbb26f-12ac-473c-89fd-1b282787fc53.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kJUU4oTD-1642060823145)(http://47.107.171.232/easily-j/images/20190310/697d8ff8-ec41-4b96-908d-6dc504814b89.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gGBbqJb5-1642060823147)(http://47.107.171.232/easily-j/images/20190310/f4f50b3e-240b-4be5-ae53-f8c68ec302b8.png)]

创建数据库与表

-- 创建数据库
create database readjava_study CHARACTER SET utf8 COLLATE utf8_general_ci;

-- 创建学生信息表
CREATE TABLE `student` (
  `student_id` int(11) NOT NULL AUTO_INCREMENT,
  `student_number` varchar(255) DEFAULT NULL,
  `student_name` varchar(255) DEFAULT NULL,
  `student_password` varchar(255) DEFAULT NULL,
  `student_sex` int(11) DEFAULT NULL,
  PRIMARY KEY (`student_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

创建动态 web 项目

需要注意一点,eclipse 需要将项目根目录改为 /,这样浏览器可以直接访问 localhost:8080 ,无需添加项目名字。idea 默认就是 / 无需更改。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bV62P8Xs-1642060823148)(http://47.107.171.232/easily-j/images/20190310/5a2b3138-fb88-4199-94ca-36a1b1dcb419.png)]

添加 jar 包和 css

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZxlM8p6A-1642060823149)(http://47.107.171.232/easily-j/images/20190310/73e76ccc-9f39-442a-a74f-8d4b3566e471.png)]

编写后台代码

工具类(util)

package com.readjava.util;

import java.sql.Connection;
import java.sql.DriverManager;

public class DbUtil {

    private static String url = "jdbc:mysql://localhost:3306/readjava_study"; // 数据库地址
    private static String userName = "root"; // 数据库用户名
    private static String passWord = "123456"; // 数据库密码
    private static Connection conn = null;

    /**
     * 获得数据库连接
     *
     * @return
     */
    public static Connection getConnection() {
        if (null == conn) {
            try {
                Class.forName("com.mysql.jdbc.Driver");
                conn = DriverManager.getConnection(url, userName, passWord);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return conn;
    }

    public static void main(String[] args) {
        System.out.println(getConnection());
    }
}

实体类(bean)

package com.readjava.bean;

public class Student {

    private Integer studentId;
    private String studentName;
    private String studentPassword;
    private Integer studentSex;
    private String studentNumber;

    public Student() {
    }

    public Integer getStudentId() {
        return studentId;
    }

    public void setStudentId(Integer studentId) {
        this.studentId = studentId;
    }

    public String getStudentName() {
        return studentName;
    }

    public void setStudentName(String studentName) {
        this.studentName = studentName;
    }

    public String getStudentPassword() {
        return studentPassword;
    }

    public void setStudentPassword(String studentPassword) {
        this.studentPassword = studentPassword;
    }

    public Integer getStudentSex() {
        return studentSex;
    }

    public void setStudentSex(Integer studentSex) {
        this.studentSex = studentSex;
    }

    public String getStudentNumber() {
        return studentNumber;
    }

    public void setStudentNumber(String studentNumber) {
        this.studentNumber = studentNumber;
    }
}

数据库交互层(dao)

package com.readjava.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.readjava.bean.Student;
import com.readjava.util.DbUtil;

public class StudentDao {

    /**
     * 所有学生信息
     *
     * @return
     */
    public List<Student> selectStudent() {
        List<Student> studentList = new ArrayList<>();
        Connection conn = DbUtil.getConnection();
        String sql = "select * from student";
        try {
            PreparedStatement pst = conn.prepareStatement(sql);
            ResultSet rst = pst.executeQuery();
            while (rst.next()) {
                Student student = new Student();
                student.setStudentId(rst.getInt("student_id"));
                student.setStudentName(rst.getString("student_name"));
                student.setStudentPassword(rst.getString("student_password"));
                student.setStudentSex(rst.getInt("student_sex"));
                student.setStudentNumber(rst.getString("student_number"));
                studentList.add(student);
            }
            rst.close();
            pst.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return studentList;
    }

    /**
     * 添加学生
     *
     * @param student
     * @return
     */
    public boolean addStudent(Student student) {
        String sql = "INSERT INTO student(student_name,student_password,student_sex,student_number) VALUES(?,?,?,?);";
        Connection conn = DbUtil.getConnection();
        try {
            PreparedStatement pst = conn.prepareStatement(sql);
            pst.setString(1, student.getStudentName());
            pst.setString(2, student.getStudentPassword());
            pst.setInt(3, student.getStudentSex());
            pst.setString(4, student.getStudentNumber());
            int count = pst.executeUpdate();
            pst.close();
            return count > 0 ? true : false;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 更新学生信息
     *
     * @param student
     * @return
     */
    public boolean updateStudent(Student student) {
        String sql = "UPDATE student set student_name=?,student_password=?,student_sex=?,student_number=? WHERE student_id=?";
        Connection conn = DbUtil.getConnection();
        try {
            PreparedStatement pst = conn.prepareStatement(sql);
            pst.setString(1, student.getStudentName());
            pst.setString(2, student.getStudentPassword());
            pst.setInt(3, student.getStudentSex());
            pst.setString(4, student.getStudentNumber());
            pst.setInt(5, student.getStudentId());
            int count = pst.executeUpdate();
            pst.close();
            return count > 0 ? true : false;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 删除学生信息
     *
     * @param studentId
     * @return
     */
    public boolean deleteStudent(int studentId) {
        String sql = "delete from student where student_id = ?";
        Connection conn = DbUtil.getConnection();
        try {
            PreparedStatement pst = conn.prepareStatement(sql);
            pst.setInt(1, studentId);
            int count = pst.executeUpdate();
            pst.close();
            return count > 0 ? true : false;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 更具id查询学生
     *
     * @param studentId
     * @return
     */
    public Student getStudentById(int studentId) {
        Connection conn = DbUtil.getConnection();
        String sql = "select * from student where student_id = " + studentId;
        Student student = new Student();
        try {
            PreparedStatement pst = conn.prepareStatement(sql);
            ResultSet rst = pst.executeQuery();
            while (rst.next()) {
                student.setStudentId(rst.getInt("student_id"));
                student.setStudentName(rst.getString("student_name"));
                student.setStudentPassword(rst.getString("student_password"));
                student.setStudentSex(rst.getInt("student_sex"));
                student.setStudentNumber(rst.getString("student_number"));
            }
            rst.close();
            pst.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return student;
    }
}

控制层(servlet)

package com.readjava.servlet;

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 com.readjava.bean.Student;
import com.readjava.dao.StudentDao;

import java.io.IOException;

@WebServlet("/add")
@SuppressWarnings("serial")
public class AddServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.getRequestDispatcher("add.jsp").forward(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        Student student = new Student();
        String studentNumber = req.getParameter("studentNumber");
        String studentName = req.getParameter("studentName");
        String studentPassword = req.getParameter("studentPassword");
        int studentSex = Integer.parseInt(req.getParameter("studentSex"));
        student.setStudentNumber(studentNumber);
        student.setStudentName(studentName);
        student.setStudentPassword(studentPassword);
        student.setStudentSex(studentSex);
        StudentDao studentDao = new StudentDao();
        studentDao.addStudent(student);
        req.getRequestDispatcher("").forward(req, resp);
    }
}
package com.readjava.servlet;

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 com.readjava.dao.StudentDao;

import java.io.IOException;

@WebServlet("/delete")
@SuppressWarnings("serial")
public class DeleteServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        int studentId = Integer.parseInt(req.getParameter("studentId"));
        StudentDao studentDao = new StudentDao();
        studentDao.deleteStudent(studentId);
        req.getRequestDispatcher("").forward(req, resp);
    }
}
package com.readjava.servlet;

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 com.readjava.bean.Student;
import com.readjava.dao.StudentDao;

import java.io.IOException;
import java.util.List;

@WebServlet("")
@SuppressWarnings("serial")
public class ListServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        StudentDao studentDao = new StudentDao();
        List<Student> studentList = studentDao.selectStudent();
        req.setAttribute("studentList", studentList);
        req.getRequestDispatcher("list.jsp").forward(req, resp);
    }
}
package com.readjava.servlet;

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 com.readjava.bean.Student;
import com.readjava.dao.StudentDao;

import java.io.IOException;

@WebServlet("/update")
@SuppressWarnings("serial")
public class UpdateServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        int studentId = Integer.parseInt(req.getParameter("studentId"));
        StudentDao studentDao = new StudentDao();
        Student student = studentDao.getStudentById(studentId);
        req.setAttribute("student", student);
        req.getRequestDispatcher("update.jsp").forward(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        Student student = new Student();
        int studentId = Integer.parseInt(req.getParameter("studentId"));
        String studentNumber = req.getParameter("studentNumber");
        String studentName = req.getParameter("studentName");
        String studentPassword = req.getParameter("studentPassword");
        int studentSex = Integer.parseInt(req.getParameter("studentSex"));
        student.setStudentId(studentId);
        student.setStudentNumber(studentNumber);
        student.setStudentName(studentName);
        student.setStudentPassword(studentPassword);
        student.setStudentSex(studentSex);
        StudentDao studentDao = new StudentDao();
        studentDao.updateStudent(student);
        req.getRequestDispatcher("").forward(req, resp);
    }
}

编写前端页面

添加页(add.jsp)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>

	<head>
		<meta charset="utf-8">
		<title>学生管理系统</title>
		<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
	</head>

	<body style="padding-top: 20px;">
		<div class="container">
			<div class="col-md-8 col-md-offset-2">
				<h1>添加学生</h1><br>
				<form action="add" method="post">
					<div class="form-group">
						<label>学生编号</label>
						<input type="text" class="form-control" name="studentNumber">
					</div>
					<div class="form-group">
						<label>学生姓名</label>
						<input type="text" class="form-control" name="studentName">
					</div>
					<div class="form-group">
						<label>学生密码</label>
						<input type="password" class="form-control" name="studentPassword">
					</div>
					<div class="form-group">
						<label class="radio-inline">
								  <input type="radio" name="studentSex" value="1" checked="checked"></label>
						<label class="radio-inline">
								  <input type="radio" name="studentSex" value="0"></label>
					</div>
					<div class="form-group">
						<button type="submit" class="btn btn-info">添加学生</button>
					</div>
				</form>
			</div>
		</div>
	</body>

</html>

列表页(list.jsp)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>

	<head>
		<meta charset="utf-8">
		<title>学生管理系统</title>
		<link rel="stylesheet" type="text/css" href="/css/bootstrap.min.css">
	</head>

	<body style="padding-top: 20px;">
		<div class="container">
			<div class="col-md-8 col-md-offset-2">
				<h1>学生列表</h1><br>
				<table class="table">
					<thead>
						<td>学生ID</td>
						<td>学生编号</td>
						<td>学生姓名</td>
						<td>学生密码</td>
						<td>学生性别</td>
						<td>操作</td>
					</thead>
					<tbody>
						<c:forEach items="${studentList}" var="student">
		                    <tr>
		                    	<td>${student.studentId}</td>
		                        <td>${student.studentNumber}</td>
		                        <td>${student.studentName}</td>
		                        <td>${student.studentPassword}</td>
		                        <td>
		                            <c:choose>
		                                <c:when test="${student.studentSex == 0}"></c:when>
		                                <c:when test="${student.studentSex == 1}"></c:when>
		                            </c:choose>
		                        </td>
		                        <td>
		                            <a class="btn btn-info btn-sm" href="/update?studentId=${student.studentId}">更 新</a>
		                            <a class="btn btn-danger btn-sm" href="/delete?studentId=${student.studentId}">删 除</a>
		                        </td>
		                    </tr>
		                </c:forEach>
					</tbody>
				</table>
				<button class="btn btn-success" onclick="window.location.href='/add'">添加学生</button>
				<button class="btn btn-info" onclick="window.location.href='/'">学生列表</button>
			</div>
		</div>
	</body>

</html>

更新页(update.jsp)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>

	<head>
		<meta charset="utf-8">
		<title>学生管理系统</title>
		<link rel="stylesheet" type="text/css" href="/css/bootstrap.min.css">
	</head>

	<body style="padding-top: 20px;">
		<div class="container">
			<div class="col-md-8 col-md-offset-2">
				<h1>更新学生</h1><br>
				<form action="/update" method="post">
					<div class="form-group">
						<label>学生ID</label>
						<input type="hidden" class="form-control" name=studentId value="${student.studentId}">
					</div>
					<div class="form-group">
						<label>学生编号</label>
						<input type="text" class="form-control" name="studentNumber" value="${student.studentNumber}">
					</div>
					<div class="form-group">
						<label>学生姓名</label>
						<input type="text" class="form-control" name="studentName" value="${student.studentName}">
					</div>
					<div class="form-group">
						<label>学生密码</label>
						<input type="password" class="form-control" name="studentPassword" value="${student.studentPassword}">
					</div>
					<div class="form-group">
						<c:choose>
							<c:when test="${student.studentSex == 1}">
			                    <label class="radio-inline">
										  <input type="radio" name="studentSex" id="studentSex" value="1" checked="checked"></label>
								<label class="radio-inline">
										  <input type="radio" name="studentSex" id="studentSex" value="0"></label>
			                </c:when>
							<c:when test="${student.studentSex == 0}">
			                    <label class="radio-inline">
										  <input type="radio" name="studentSex" id="studentSex" value="1"></label>
								<label class="radio-inline">
										  <input type="radio" name="studentSex" id="studentSex" value="0" checked="checked"></label>
			                </c:when>
			            </c:choose>
					</div>
					<div class="form-group">
						<button type="submit" class="btn btn-info">更新学生</button>
					</div>
				</form>
			</div>
		</div>
	</body>

</html>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>servlet-crud</display-name>
  <welcome-file-list>
    <welcome-file>list.jsp</welcome-file>
  </welcome-file-list>
</web-app>

基于注解开发

一定很好奇为什么配置文件只修改了欢迎页面为 list.jsp,而没有类似 servlet-mapper 的配置,下面是原来的写法。

<servlet>
	<servlet-name>AddServlet</servlet-name>
	<servlet-class>com.readjava.AddServlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>AddServlet</servlet-name>
	<url-pattern>/Add</url-pattern>
</servlet-mapping>

配置文件写法升级,通过注解的方式将繁琐的配置文件简化,上面的配置文件映射就可以改为以下注解:

@WebServlet("/add")
public class AddServlet extends HttpServlet {

}

源码下载

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zh1g9Q40-1642060823153)(http://47.107.171.232/easily-j/images/20190310/42196bfc-cd1a-44ca-8f9a-269fb1aa37bd.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pH5PLxi8-1642060823155)(http://47.107.171.232/easily-j/images/20190310/2556c8bc-60c3-457c-b7a9-cd25ccbd0f02.png)]

微信公众号

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tellsea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值