【Servlet】规范项目结构|基于Mysql+JDBC+Servlet 制作简易网页|实现登录、添加、删除、显示的功能(上)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 【Servlet】规范项目结构|基于Mysql+JDBC+Servlet 制作简易网页|实现登录、添加、删除、显示的功能

🔥前言


书接上文,今天我们来规范书写servlet代码,分包分类的规划项目结构。我们知道一个项目靠一个人是很难完成的,那么在团队合作的时候难免会有看不懂队友写的代码的情况出现。因此按照特定的格式来书写代码无疑可以一定程度上减少这种事情发生的概率。


1、需要导入的jar包以及项目结构速览


84a511e1501b4950b380c23a6b5c2d57.png

284cd88b5a7b4ad392700e9cddd30cfe.png

b472d8b0f10c46b6938b8e3577316afd.png


2、工具类放在util包下,资源文件放在src目录下

工具类最终版JDBCUtils可参考我JDBC专栏里的博文,资源文件就是图中的jdbc.properties,里面存放数据库的驱动路径、访问路径、账号名和密码。


3、具体类写在实体类的包下(entity)

以此次博客要分享的项目为例:


我要做的是一个有登录和增删查询功能的网页,因此可以定义一个Person类,实现Serializable接口(形成习惯),封装姓名、密码等属性并提供对应的构造方法(不要忘了写无参构造)


具体代码如下:

package com.qj.entity;
import java.io.Serializable;
public class Person implements Serializable {
    private Integer id;
    private String name;
    private String pwd;
    private String QQ;
    private String beizhu;
    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", pwd='" + pwd + '\'' +
                ", QQ='" + QQ + '\'' +
                ", beizhu='" + beizhu + '\'' +
                '}';
    }
    public Person(Integer id, String name, String pwd, String QQ, String beizhu) {
        this.id = id;
        this.name = name;
        this.pwd = pwd;
        this.QQ = QQ;
        this.beizhu = beizhu;
    }
    public Person() {
    }
    public Person(String name, String pwd) {
        this.name = name;
        this.pwd = pwd;
    }
    public String getQQ() {
        return QQ;
    }
    public void setQQ(String QQ) {
        this.QQ = QQ;
    }
    public String getBeizhu() {
        return beizhu;
    }
    public void setBeizhu(String beizhu) {
        this.beizhu = beizhu;
    }
    public Integer getId() {
        return id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
}

4、dao层接口与接口的实现类

dao层是与数据库对接的,存放操作数据库的接口方法。而在dao包里面还有一个impl包用来存放接口的实现类,用来操作数据库,例如:增删改查。


4.1、PersonDao接口

这里提供了几种方法接口:


根据查询名字返回person对象

查询数据库中的所有人并存入list集合中

将person信息插入到数据库中

根据id删除数据库中的person

package com.qj.dao;
import com.qj.entity.Person;
import java.util.List;
public interface PersonDao {
    /**
     *
     * @param name  用户输入的名字
     * @return      返回数据库里的Person对象
     */
    Person selectByName(String name);
    /**
     *
     * @return  返回t_Perosn表中所有人
     */
    List<Person> selectAll();
    /**
     *
     * @param person  插入到表格
     * @return        受影响行数
     */
    int insertPerson(Person person);
    /**
     *
     * @param id      按照id删除好友
     * @return        返回受影响行数
     */
    int deletePerson(Integer id);
}

4.2、PersonDaoImpl接口实现类

这里就是针对PersonDao接口的具体实现代码,如果有看不懂的可以参考我的JDBC专栏的文章

package com.qj.dao.impl;
import com.qj.dao.PersonDao;
import com.qj.entity.Person;
import com.qj.util.JDBCUtils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
public class PersonDaoImpl implements PersonDao {
    @Override
    public Person selectByName(String name) {
        Connection conn = null;
        PreparedStatement ps=null;
        ResultSet rs = null;
        Person person = null;
        try {
            conn = JDBCUtils.getConnection();
            String sql = "select *from t_Person where p_name=?";
            ps = conn.prepareStatement(sql);
            ps.setString(1, name);
            rs = ps.executeQuery();
            if (rs.next()) {
                String l_name = rs.getString("p_name");
                String l_pwd = rs.getString("p_password");
                person = new Person(l_name, l_pwd);
            }
        } catch (Exception e) {
            System.out.println("未知异常");
            e.printStackTrace();
        }finally {
            JDBCUtils.close(rs, ps, null);
        }
        return person;
    }
    @Override
    public List<Person> selectAll() {
        Connection conn = null;
        PreparedStatement ps=null;
        ResultSet rs = null;
        List<Person> list = new ArrayList<>();
        try {
            conn = JDBCUtils.getConnection();
            String sql = "select *from t_Person";
            ps = conn.prepareStatement(sql);
            rs = ps.executeQuery();
            while (rs.next()) {
                Integer id = rs.getInt("p_id");
                String name = rs.getString("p_name");
                String pwd = rs.getString("p_password");
                String QQ = rs.getString("p_QQ");
                String beizhu = rs.getString("p_bz");
                Person p = new Person(id, name, pwd, QQ,beizhu);
                list.add(p);
            }
        } catch (Exception e) {
            System.out.println("未知异常");
            e.printStackTrace();
        }finally {
            JDBCUtils.close(rs, ps, null);
        }
        return list;
    }
    @Override
    public int insertPerson(Person person) {
        Connection conn = null;
        PreparedStatement ps=null;
        int n=0;
        try {
            conn = JDBCUtils.getConnection();
            String sql = "insert into t_Person value(null,?,?,?,?)";
            ps = conn.prepareStatement(sql);
            ps.setString(1, person.getName());
            ps.setString(2, person.getPwd());
            ps.setString(3, person.getQQ());
            ps.setString(4, person.getBeizhu());
            n = ps.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            JDBCUtils.close(null, ps, null);
        }
        return n;
    }
    @Override
    public int deletePerson(Integer id) {
        Connection conn = null;
        PreparedStatement ps=null;
        int n=0;
        try {
            conn = JDBCUtils.getConnection();
            String sql = "delete from t_Person where p_id=?";
            ps = conn.prepareStatement(sql);
            ps.setInt(1, id);
            n = ps.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            JDBCUtils.close(null, ps, null);
        }
        return n;
    }
}
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
24天前
|
Java 关系型数据库 数据库连接
实时计算 Flink版操作报错之在使用JDBC连接MySQL数据库时遇到报错,识别不到jdbc了,怎么解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
1月前
|
Java 关系型数据库 MySQL
JDBC实现往MySQL插入百万级数据
JDBC实现往MySQL插入百万级数据
|
1天前
|
SQL 关系型数据库 MySQL
MySQL数据库基础练习系列13、用户注册与登录系统
MySQL数据库基础练习系列13、用户注册与登录系统
7 1
|
23天前
|
SQL Java 关系型数据库
JavaWeb(JDBC编程)看这一篇就够了 —— 如何使用Java操作mysql数据库
JavaWeb(JDBC编程)看这一篇就够了 —— 如何使用Java操作mysql数据库
16 0
|
24天前
|
SQL 关系型数据库 MySQL
MySQL中的12个SQL编写规范
SQL良好习惯提升查询清晰度、效率和安全性,包括使用EXPLAIN分析查询计划、DELETE/UPDATE时加LIMIT限制影响范围、为表和字段添加注释、关键字大写缩进、指定INSERT字段名、先测试后执行、表含主键及时间戳字段、Update/Delete需Where条件、用InnoDB引擎、避免SELECT *,选择UTF8字符集和规范索引命名。
MySQL中的12个SQL编写规范
|
1月前
|
关系型数据库 MySQL 数据库
MySQL 启动 登录报错Job for mysqld.service failed because the control process exited with error code. See
MySQL 启动 登录报错Job for mysqld.service failed because the control process exited with error code. See
|
1月前
|
负载均衡
Servlet 教程 之 Servlet 网页重定向 1
Servlet教程展示了如何实现网页重定向。使用`HttpServletResponse`的`sendRedirect()`方法或结合`setStatus()`和`setHeader()`可将请求转向新位置。示例代码创建了一个Servlet,名为`PageRedirect`,在接收到请求时重定向至百度首页。配置`web.xml`后,通过访问`http://localhost:8080/PageRedirect`即可触发重定向。
21 6
|
1月前
|
SQL Java 关系型数据库
JDBC批量插入mysql数据
JDBC批量插入mysql数据
|
1月前
|
Java 关系型数据库 MySQL
【JDBC编程】基于MySql的Java应用程序中访问数据库与交互数据的技术
【JDBC编程】基于MySql的Java应用程序中访问数据库与交互数据的技术
|
1月前
|
NoSQL 关系型数据库 Redis
数据管理DMS产品使用合集之要通过 DMS 登录到 RDS、DRDS 或 Redis,我该怎么操作
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。

推荐镜像

更多