04-JavaWeb-使用Servlet+JSP+JDBC实现CRUD

2023-11-17

一、介绍

在掌握了JavaAPI ,HTML,Servlet,JSP、JDBC等知识后,咱们利用这些知识点,打通从前端页面到后端Java,再到数据库的各个环节,通过实现一个员工的CRUD来巩固一下相关知识。
项目架构如下:
在这里插入图片描述

实现功能如下:

  • 员工列表 和 员工删除
    在这里插入图片描述

  • 员工新增
    在这里插入图片描述

  • 员工修改
    在这里插入图片描述

二、项目创建

创建JavaWeb项目,并在lib中导入相关jar包依赖,这里页面样式我用到了bootstrap。
在这里插入图片描述

三、员工表和实体类

3.1 员工表

CREATE TABLE `employee` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '员工编号,主键',
  `name` varchar(50) DEFAULT NULL COMMENT '员工姓名',
  `age` int(11) DEFAULT NULL COMMENT '员工年龄',
  `sex` int(1) DEFAULT NULL COMMENT '性别:1表示男,0表示女',
  `phone` varchar(50) DEFAULT NULL COMMENT '员工电话',
  `address` varchar(50) DEFAULT NULL COMMENT '住址',
  `createdate` datetime DEFAULT NULL COMMENT '新建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

INSERT INTO `employee` VALUES (1, '张三', 30, 1, '13455556666', '成都市锦江区xx路1号', '2022-07-29 14:45:04');
INSERT INTO `employee` VALUES (2, '李四', 31, 1, '13566667777', '北京市丰台区xx路2号', '2022-07-29 14:45:07');
INSERT INTO `employee` VALUES (3, '王花', 18, 0, '13588889999', 'xx市xx区xx路3号', '2022-07-29 14:45:09');

3.2 员工实体类

public class Employee {
   
    private Long id;
    private String name;
    private Integer age;
    private Integer sex;
    private String phone;
    private String address;
    private Date createdate;

    public Long getId() {
   
        return id;
    }
    public void setId(Long id) {
   
        this.id = id;
    }
    public String getName() {
   
        return name;
    }
    public void setName(String name) {
   
        this.name = name;
    }
    public Integer getAge() {
   
        return age;
    }
    public void setAge(Integer age) {
   
        this.age = age;
    }
    public Integer getSex() {
   
        return sex;
    }
    public void setSex(Integer sex) {
   
        this.sex = sex;
    }
    public String getPhone() {
   
        return phone;
    }
    public void setPhone(String phone) {
   
        this.phone = phone;
    }
    public String getAddress() {
   
        return address;
    }
    public void setAddress(String address) {
   
        this.address = address;
    }
    public Date getCreatedate() {
   
        return createdate;
    }
    public void setCreatedate(Date createdate) {
   
        this.createdate = createdate;
    }
}

3.3 JDBC工具类

public class JDBCUtils {
   
    static {
   
        try {
   
            //加载驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (Exception e) {
   
            e.printStackTrace();
        }
    }
    /**
     * 获取数据库连接
     * @return
     */
    public static Connection getConnection(){
   
        try {
   
            Connection conn = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/库名?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai",
                    "用户名",
                    "密码");
            return conn;
        } catch (SQLException e) {
   
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 释放资源
     * @param conn 连接对接
     * @param ps   预编译语句对象
     * @param rs   结果集
     */
    public static void close(Connection conn,PreparedStatement ps,ResultSet rs){
   
        if(conn!=null){
   
            try {
   
                conn.close();
            } catch (SQLException e) {
   
                e.printStackTrace();
            }
        }
        if(ps!=null){
   
            try {
   
                ps.close();
            } catch (SQLException e) {
   
                e.printStackTrace();
            }
        }
        if(rs!=null){
   
            try {
   
                rs.close();
            } catch (SQLException e) {
   
                e.printStackTrace();
            }
        }

    }
}

四、员工列表实现

4.1 持久层

接口:cn.emp.dao.IEmployeeDao

public interface IEmployeeDao{
   
    /**
     * 查询所有员工数据
     * @return 员工列表
     */
    List<Employee> selectAll();
}

实现类:cn.emp.dao.impl.EmployeeDaoImpl

public class EmployeeDaoImpl implements IEmployeeDao {
   
    @Override
    public List<Employee> selectAll() {
   
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
   
            conn = JDBCUtils.getConnection();
            //创建预编译对象并编写sql
            ps = conn.prepareStatement("select * from employee");
            //执行查询
            rs = ps.executeQuery();
            //遍历结果集
            List<Employee> employees = new ArrayList<>();
            while (rs.next()){
   
                Employee employee = new Employee();
                employee.setId(rs.getLong("id"));
                employee.setName(rs.getString("name"));
                employee.setAge(rs.getInt("age"));
                employee.setSex(rs.getInt("sex"));
                employee.setPhone(rs.getString("phone"));
                employee.setAddress(rs.getString("address"));
                employee.setCreatedate(rs.getTimestamp("createdate"));
                employees.add(employee);
            }
            return employees;
        } catch (SQLException e) {
   
            e.printStackTrace();
        } finally {
   
            JDBCUtils.close(conn,ps,rs);
        }
        return null;
    }
}

4.2 业务层

接口:cn.emp.service.IEmployeeService

public interface IEmployeeService {
   
    /**
     * 查询所有员工数据
     * @return 员工列表
     */
    List<Employee> selectAll();
}

实现类:cn.emp.service.impl.EmployeeServiceImpl

public class EmployeeServiceImpl implements IEmployeeService {
   

    private IEmployeeDao employeeDao = new EmployeeDaoImpl();

    @Override
    public List<Employee> selectAll() {
   
        return employeeDao.selectAll();
    }
}

4.3 控制器实现

cn.emp.controller.EmployeeController

@WebServlet("/emp/*")
public class EmployeeController extends HttpServlet {
   

    private IEmployeeService employeeService = new EmployeeServiceImpl();

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

04-JavaWeb-使用Servlet+JSP+JDBC实现CRUD 的相关文章

  • 如何使用 IO Codenameone 发布图片/图像

    因为 codenameone 不能使用外部库 HttpConnection 所以我必须使用 Codenameone 提供的内部库 API 只是我已经设法使用 ConnectionRequest 将数据发布到格式化文本 字符串 我想知道是否有
  • 数组查找时间复杂度和。它是如何存储的

    众所周知 通过索引访问数组的时间复杂度是O 1 Java 的文档ArrayList 它由数组支持 对其也有同样的说法get手术 size isEmpty get set iterator 和 listIterator 操作以恒定时间运行 查
  • JPA 实体中的方法是否允许抛出异常?

    我尝试创建的 Entity 有问题 当尝试使用 OpenJPA 实现在 Eclipse 中测试类时出现问题 我有not尝试过其他人 所以不确定它是否适用于他们 我的测试用例非常简单 因为它创建一个 EntityManagerFactory
  • Windows 上的虚假唤醒。是否可以?

    我最近学习了 虚假唤醒 有人说这个问题只可能发生在某些类型的 Linux PC 上 我用的是窗户 我为虚假唤醒编写了测试 我得到的结果是这是可能的 但我想向您展示这个测试 也许我在某个地方犯了错误 我的初始变体 import java ut
  • 模拟框架对我有什么作用?

    我听说有些我无法交谈的人是 jmock 的忠实粉丝 我已经做了以测试为中心的开发多年 所以我浏览了网站并查看了一些文档 但仍然不知道它有什么好处 我对春天也有同样的问题 如果您已经了解它是什么 他们的文档会很好地解释它 所以我并不认为 jm
  • 为移动设备扩展 libgdx UI?

    眼下desktop应用程序的版本很好 按钮缩放得很好 但是当我部署到android它们很小 几乎无法使用 DesktopLauncher public class DesktopLauncher public static void mai
  • Hamcrest 泛型地狱 #2:iterable With Size 给出错误“不适用于参数”

    在 hamcrest 中 1 3 RC2 没有 JUnit 依赖项 我使用失败iterableWithSize 我有一个 扩展 Iterator参数化为Content像这样EndResult
  • JLabel.setText() 中的换行符

    使用 JLabel setText 时如何插入换行符 我尝试使用 Html 但似乎可以使其适用于 setText 仅适用于 jLabel 的初始声明 最初声明 jlabel 时的方法是 label new JLabel Hello Worl
  • Java HttpURLConnection:内容长度计算

    我目前正在为 bitbucket issues RESTful API 开发一个库 我取得了很大的进步 现在我要解决这个部分更新问题 http confluence atlassian com display BBDEV Issues Is
  • 小米和oppo等中国ROM上的工作管理器,在电池优化时,将工作的计划延迟增加几个小时

    小米和 Oppo 等中国 ROM 上的工作管理器在进行电池优化时 会将计划的工作延迟增加几个小时 但是 我注意到一些应用程序即使在电池优化下也能够让计划的作业安静地完美运行 我注意到的一个区别是 它们每次运行作业时都会显示一条通知 那么这是
  • 用java解密AES加密文件

    我有一个使用 AES 使用 java 应用程序加密的文件 我还有一个加密的密钥文件 但我不明白如何使用密钥来解密文件 大多数教程和示例都会在一个地方创建临时随机密钥 加密文件和解密 所以 问题是如何指定解密时必须使用的密钥 EDIT 我发现
  • java3d 中的面部着色

    使用java3d 如何不在每个顶点基础上着色 而是在每个面基础上着色 我尝试学习 java3d 但我生成的 Shape3d 看起来并不符合预期 我想用不同的颜色给不同的三角形着色 但我不知道该怎么做 纹理看起来有点大材小用 而且我根本没有掌
  • 当相应的 JTextfield 为空时,如何填充 JTable 中的所有项目

    我正在 Java 项目中设计一个高级搜索选项sqlite在 NetBeans 中 有5种不同JTextfields和 5 列 我想填充JTable具有相应的匹配标准 如果一个JTextfield为空 那么它应该选择该列的所有项目 我使用的查
  • java.lang.NoSuchMethodError:com.fasterxml.jackson.databind.type。使用 apache beam Spark runner 运行 go 示例时

    我想跑grades https github com apache beam tree master sdks go examples gradesapache beam go sdk 提出的示例 在一个主服务器和两个从服务器 spark2
  • 如何实现再次播放功能?

    我希望在游戏结束时得到提示 如果我还想再玩一次的话 并使用 Y N 输入 退出游戏或重复游戏 我该如何以最有效的方式解决这个问题 编辑 描述资源路径位置类型 类型 Main Main java ScaredyCat src se grupp
  • 仅在java中使用数组计算50的阶乘

    我是java的初学者 我有一个作业要编写一个完整的程序 使用数组计算 50 的阶乘 我无法使用像 biginteger 这样的任何方法 我只能使用数组 因为我的教授希望我们理解背后的逻辑 我猜 然而 他并没有真正教我们数组的细节 所以我在这
  • 用于将字符串与通配符模式进行匹配的递归函数

    所以我一整天都在试图解决这个作业 只是无法完成 以下函数接受 2 个字符串 第二个 不是第一个 可能包含 的 星号 An 是字符串的替换 空 1个字符或更多 它可以出现 仅在s2中 一次 两次 更多或根本不出现 它不能与另一个相邻 ab c
  • Spring Boot 健康执行器 - 什么时候上线?

    我找不到任何有关 Springs Health Actuator 何时返回 UP 状态的文档 你能依靠一切吗 Components正在初始化 会不会 Controller准备好满足请求了吗 为了测试应用程序上下文是否已加载 您可以执行此自定
  • 如何在 SpringDoc OpenAPI 3 中引用文件?

    我有 Spring Boot 项目 我想在其中记录我的 API 这里是正在处理的 Web 服务的示例 ApiResponses value ApiResponse responseCode 200 content Content media
  • gwt - 在 RPC 调用中使用 List

    我有一个 RPC 服务 方法如下 public List

随机推荐

  • OkHttp库简介

    一直以来 Java并没有什么比较好用的HTTP库 JDK自带的HTTP类又非常旧 难以使用 今天我发现了一个使用比较广泛的OkHttp库 它在安卓和Java领域都有使用 在Github上的星数有两万多 所以我们可以放心的使用 安装 先来看看
  • linkToDeath机制了解和使用

    转自 http www jianshu com p e38f08e34686 在学习Binder和AIDL的过程中遇到的一些有意思的事情 linkToDeath机制 我们先看看官网如何介绍 When working with remote
  • pytorch:参数pin_memory=True和non_blocking=True的作用

    目录 一 pin memory 二 non blocking 一 pin memory pin memory是dataloader 的参数 默认值为False 其作用是是否把把数据存放在锁页内存中 主机的内存根据物理内存 内存条 与虚拟内存
  • 服务器2012系统截屏,Windows Server 2012 R2 Preview界面截图

    微软将在BUILD大会上公开发布Windows 8 1 预览版 Windows 8 1是Windows Blue升级项目的一部分 那么一直以来与Windows客户端如影随形的Windows Server呢 是的 Blue项目并非仅为Wind
  • 微信小程序和APP优劣势大对比

    小程序的优势 1 无需下载 随走随关 2 功能丰富 体验更简便 3 接口众多 可以进行不断的开发 4 流量入口大 背靠日活9 6亿的微信 5 有强大的微信生态环境 小程序对比APP的好处 1 开发成本低 2 开发门槛低 3 获客成本低于Ap
  • 星星之火-47: 5G的八大组网方案

    目录 1 5G组网方案概述 2 选项3系列 4G LTE接入网 5G NR 接入网 4G LTE核心网 3 选项2 5G NR 5G 核心网 4 选项7系列 4G LTE接入网 5G NR接入网 5G核心网 5 选项4系列 4G LTE接入
  • Qt进程间通信

    进程是操作系统的基础之一 一个进程可以认为是一个正在执行的程序 我们可以把进程当做计算机运行时的一个基础单位 关于进程的讨论已经超出了本章的范畴 现在我们假定你是了解这个概念的 在 Qt 中 我们使用 QProcess 来表示一个进程 这个
  • .getClass.getClassLoader.getResourceAsStream的方式加载文件,总是为null加载不到数据

    记录一个问题 我在用如下的代码加载配置文件的时候 总是加载不到数据 文件位置的对的 SparkSessionBase getClass getClassLoader getResourceAsStream spark conf proper
  • Unity之脚本API笔记一(Transform详解及使用方法)

    一 什么是Transform 场景中的每一个物体都有一个Transform 用于存储和操作对象的位置 旋转和缩放 存在层级关系 父级和子级 二 常用变量与属性 位置 1 位置 position 世界坐标 localposition 相对坐标
  • https通讯过程,常见的状态码,DNS解析过程

    一 https通讯过程 1 客户端发起HTTPS请求 然后连接到服务器的443端口 2 传送服务器的证书给客户端 自己颁发的证书需要客户端验证通过 才可以继续访问 而使用受信任的公司申请的证书则不会弹出提示页面 3 客户端收到服务器端的证书
  • JDBC入门

    JDBC 1 JAVA DATABASE CONNECTION 导入jar包 驱动 加载驱动类 Class forName 类名 给出url username password 其中url背下来 jdbc 使用DriverManger来得到
  • Tensorflow学习笔记(一)拟合线性平面 逐句解析

    TensorFlow Python API 依赖 Python 2 7 版本 Python 程序生成了一些三维数据 然后用一个平面拟合它 import tensorflow as tf import numpy as np 使用 NumPy
  • 基于CentOS 7.6安装及配置APISIX 3.0环境

    最近一直在研究微服务相关内容 通过对比各大API网关 发现新起之秀 APISIX无论从开源程度上来讲还是功能上 都拥有很大的优势 经历了几天折磨一样的学习 目前在本地环境中配置成功了一套 以供自己留存吧 实在是网上的很多文章要么太老了 要么
  • 小程序项目实战(二)

    此文章用于总结自己的知识点 有这个项目有兴趣的伙伴可以点击下方链接购买学习 小程序音乐项目开发实战 大神coderwhy新课 学习视频教程 腾讯课堂课程简介https ke qq com course 4162214 一 了解小程序中的基础
  • 自己创建下拉框数组

    自己创建1 8的数组供下拉框选择 this scanPositions new Array 8 fill null map i index gt return label index 1 车 value index 1
  • 2023年第1季社区Task挑战赛开启,等你来战!

    社区Task挑战赛是面向社区开发者开展的代码或教程征集活动 该挑战赛为社区中热爱FISCO BCOS及周边组件的开发者提供了探索区块链技术 挑战技术难题的舞台 该挑战赛去年在社区成功举办了3季 共吸引了数百名开发者报名 前3季都有哪些有趣的
  • Java多态

    关于引用的进一步理解 交换值 因为Java方法在传递参数的时候都是值传递 那么如何通过方法实现2个数的值交换 明确 在传引用的时候 到底拿引用干了个啥 class Value public int a public class Test p
  • 【51单片机 】定时器的初始值计算 详解

    首先值得一提的是 51单片机定时器与主程序是并行工作的 就是主程序在运行的时候 定时器也在计数 计数溢出后定时器中断主程序的运行 转而执行中断服务程序 此外还有串行口 中断系统 都独立的工作 不用 CPU 干预 正文部分 好了 我们先来看初
  • ROS noetic tf demo错误处理及python版本切换

    文章目录 报错描述及解决 ubuntu20 04下python版本切换 报错描述及解决 ubuntu版本 20 04 ROS版本 noetic roslaunch turtle tf turtle tf demo launch 报错信息 t
  • 04-JavaWeb-使用Servlet+JSP+JDBC实现CRUD

    一 介绍 在掌握了JavaAPI HTML Servlet JSP JDBC等知识后 咱们利用这些知识点 打通从前端页面到后端Java 再到数据库的各个环节 通过实现一个员工的CRUD来巩固一下相关知识 项目架构如下 实现功能如下 员工列表