完成基于Servlet的对user表的增删改查

news2024/11/16 9:01:40

基于Servlet的增删改查

1.开发环境

  • IDEA
  • JDK1.8
  • Tomcat8.5
  • Mysql 8.0.12

2.数据库

2.1表创建

 

2.2表数据

 

3.JavaWeb代码

3.1目录结构

 

3.2util包下代码

JdbcUtil完成对数据库的连接和资源释放

JsonResult对返回前端资源的封装

JdbcUtil代码:

/*
数据库连接板帮助类
*/
    public class JdbcUtil {
        private static final String DRIVERNAME="com.mysql.cj.jdbc.Driver";
        private static final String URL="jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai";
        private static final String USERNAME="root";
        private static final String PASSWORD="root";
        static {
            try {
//       1.加载驱动类
                Class.forName(DRIVERNAME);
            } catch (ClassNotFoundException e) {
                System.out.println("驱动加载错误:"+ e);
            }
        }
        //  2.返回数据库连接对象
        public static Connection getJDBCConnection(){
            Connection connection=null;
            try {
                connection= DriverManager.getConnection(URL,USERNAME,PASSWORD);
            } catch (SQLException e) {
                System.out.println("创建连接对象错误:"+ e);
            }
            finally {
                return connection;
            }
        }

        //    3.关闭资源
        public static void closeJDBC(ResultSet resultSet, Statement statement, Connection connection){
            try {
                if (resultSet!=null)
                    resultSet.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
            finally {
                if (statement!=null) {
                    try {
                        statement.close();
                    } catch (SQLException throwables) {
                        throwables.printStackTrace();
                    }
                    finally {
                        try {
                            if (connection!=null)
                                connection.close();
                        } catch (SQLException throwables) {
                            throwables.printStackTrace();
                        }
                        finally {
                            System.out.println("close success!");
                        }
                    }
                }
            }

        }


    }


JsonResult代码:

public class JsonResult {
    private Integer code;
    private String message;
    private Object data;

    public JsonResult(Integer code, String message, Object data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }

    public JsonResult() {
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    @Override
    public String toString() {
        return "JsonResult{" +
                "code:" + code.toString() +
                ", message:" + message +
                ", data:" + data+
                '}';
    }
}

3.3entity包下代码

User实体类代码

User代码:

public class User implements Serializable {
private Integer id;
private String name;
private String password;
private String sex;
private Date birthday;

    public User(Integer id, String name, String password, String sex, Date birthday) {
        this.id = id;
        this.name = name;
        this.password = password;
        this.sex = sex;
        this.birthday = birthday;
    }

    public User() {
    }


    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    @Override
    public String toString() {
        return "User{" +
                "id:" + id +
                ", name:" + name +
                ", password:" + password +
                ", sex:" + sex +
                ", birthday:" + birthday +
                '}';
    }
}

3.4dao包下代码

dao层完成对数据库user表的增删改查操作

UserDao定义的是接口

UserDao'Impl定义的是接口的实现类。

注意:基于事务的操作。

UserDao代码:

public interface UserDao {

    public boolean save(User user);
    public boolean update(User user);
    public boolean delete(Integer id);
    public User getUserById(Integer id);
    public List<User> listAll();
}

UserDaoImpl代码:

public class UserDaoImpl implements UserDao {
    @Override
    public boolean save(User user) {
        Connection connection=JdbcUtil.getJDBCConnection();
        String sql="insert  into user(`name`,`password`,`sex`,`birthday`) values(?,?,?,?)";
        PreparedStatement statement=null;
        try {
            statement=connection.prepareStatement(sql);
            connection.setAutoCommit(false);
            statement =connection.prepareStatement(sql);
            statement.setString(1,user.getName());
            statement.setString(2,user.getPassword());
            statement.setString(3,user.getSex());
            statement.setDate(4,user.getBirthday());
            int line=statement.executeUpdate();
            connection.commit();
            if (line>=1)
                return true;
            else
                return false;
        } catch (SQLException throwables) {
            throwables.printStackTrace();
            try {
                connection.rollback();
            } catch (SQLException e) {
                return false;
            }
            return false;
        }
        finally {
           try {
               statement.close();
               connection.close();
           }
           catch (SQLException e) {
               e.printStackTrace();
               return false;
           }
        }
    }

    @Override
    public boolean update(User user) {
        Connection connection=JdbcUtil.getJDBCConnection();
        String sql="update   user set `name`=?,`password`=?,`sex`=?,`birthday`=? where `id`=?";
        PreparedStatement statement=null;
        try {
            statement=connection.prepareStatement(sql);
            connection.setAutoCommit(false);
            statement =connection.prepareStatement(sql);
            statement.setString(1,user.getName());
            statement.setString(2,user.getPassword());
            statement.setString(3,user.getSex());
            statement.setDate(4,user.getBirthday());
            statement.setInt(5,user.getId());
            int line=statement.executeUpdate();
            connection.commit();
            if (line>=1)
                return true;
            else
                return false;
        } catch (SQLException throwables) {
            throwables.printStackTrace();
            try {
                connection.rollback();
            } catch (SQLException e) {
                return false;
            }
            return false;
        }
        finally {
            try {
                statement.close();
                connection.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
                return false;
            }

        }
    }

    @Override
    public boolean delete(Integer id) {
        Connection connection=JdbcUtil.getJDBCConnection();
        String sql="delete from  user where `id`=?";
        PreparedStatement statement=null;
        try {
            statement=connection.prepareStatement(sql);
            connection.setAutoCommit(false);
            statement.setInt(1,id);
            int line=statement.executeUpdate();
            connection.commit();
            if (line>=1) {
                return true;
            }
            else
                return false;

        } catch (SQLException throwables) {
            throwables.printStackTrace();
            try {
                connection.rollback();
            } catch (SQLException e) {
                return false;
            }
            return false;
        }
        finally {
            try {
                statement.close();
                connection.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
                return false;
            }

        }
    }
    @Override
    public User getUserById(Integer id) {
        Connection connection=JdbcUtil.getJDBCConnection();
        String sql="select * from  user where `id`=?";
        User user=new User();
        PreparedStatement statement=null;
        try {
            statement=connection.prepareStatement(sql);
            statement.setInt(1,id);
            ResultSet set=statement.executeQuery();
            if (set.next()){
                user.setId(set.getInt("id"));
                user.setName(set.getString("name"));
                user.setPassword(set.getString("password"));
                user.setSex(set.getString("sex"));
                user.setBirthday(set.getDate("birthday"));
            }

        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        finally {
            return user;
        }
    }

    public static void main(String[] args) {
        System.out.println(new UserDaoImpl().delete(8));
    }
    @Override
    public List<User> listAll() {
        List<User> list=new ArrayList<User>();
        Connection connection=JdbcUtil.getJDBCConnection();
        String sql="select  * from  user ";
        Statement statement=null;
        try {
            statement=connection.createStatement();
            ResultSet set=statement.executeQuery(sql);
            while (set.next()){
                User user=new User();
                user.setId(set.getInt("id"));
                user.setName(set.getString("name"));
                user.setPassword(set.getString("password"));
                user.setSex(set.getString("sex"));
                user.setBirthday(set.getDate("birthday"));
                list.add(user);
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        finally {
            return list;
        }

    }

}

3.5servic包下代码

UserService以及UserServiceImpl完成对业务逻辑的封装

UserService代码:

public interface UserService {
    public boolean save(User user);
    public boolean update(User user);
    public boolean delete(Integer id);
    public User getUserById(Integer id);
    public List<User> listAll();
}

UserServiceImpl代码:

public class UserServiceImpl implements UserService {
    private UserDao userDao=new UserDaoImpl();
    @Override
    public boolean save(User user) {
        return userDao.save(user);
    }

    @Override
    public boolean update(User user) {
        return userDao.update(user);
    }

    @Override
    public boolean delete(Integer id) {
        return userDao.delete(id);
    }

    @Override
    public User getUserById(Integer id) {
        return userDao.getUserById(id);
    }

    @Override
    public List<User> listAll() {
        return userDao.listAll();
    }
}

3.6controller代码

采用基于Servlet的请求转发

UserController代码:

@WebServlet(name = "userController",urlPatterns = {
        "/save",
        "/update",
        "/delete",
        "/findAll",
        "/getUserById"
})
public class UserController extends HttpServlet {
        private UserService userService=new UserServiceImpl();

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String option =req.getParameter("option");
        JsonResult jsonResult=new JsonResult();
        if (option.equals("findAll")){
            jsonResult.setCode(200);
            jsonResult.setMessage("获取成功!");
            jsonResult.setData(userService.listAll());
        }
        else if (option.equals("getUserById")){
            Integer id=Integer.parseInt(req.getParameter("id"));
            jsonResult.setCode(200);
            jsonResult.setMessage("获取成功!");
            jsonResult.setData(userService.getUserById(id));
        }
        else {
            jsonResult.setCode(20000);
            jsonResult.setMessage("获取失败!");
            jsonResult.setData(null);
        }
        resp.getWriter().println(jsonResult.toString());
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String option =req.getParameter("option");
        JsonResult jsonResult=new JsonResult();
        if (option.equals("save")){
            User user=new User();
            user.setName(req.getParameter("name"));
            user.setSex(req.getParameter("sex"));
            user.setPassword(req.getParameter("password"));
           SimpleDateFormat format= new SimpleDateFormat("yyyy-MM-dd");
            if (!req.getParameter("birthday").equals(""))
            {
                try {
                    user.setBirthday(new Date(format.parse(req.getParameter("birthday")).getTime()));
                } catch (ParseException e) {
                    user.setBirthday(null);
                }
            }
            if (userService.save(user)){
                jsonResult.setCode(200);
                jsonResult.setMessage("添加成功!");
                jsonResult.setData(null);
            }
            else {
                jsonResult.setCode(20000);
                jsonResult.setMessage("添加失败!");
                jsonResult.setData(null);
            }
        }
        else {
            jsonResult.setCode(20000);
            jsonResult.setMessage("添加失败!");
            jsonResult.setData(null);
        }
        resp.getWriter().println(jsonResult.toString());
    }

    @Override
    protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String option =req.getParameter("option");
        JsonResult jsonResult=new JsonResult();
        if (option.equals("delete")){
            Integer id=Integer.parseInt(req.getParameter("id"));
            if (userService.delete(id)){
                jsonResult.setCode(200);
                jsonResult.setMessage("删除成功!");
                jsonResult.setData(null);
            }
            else {
                jsonResult.setCode(20000);
                jsonResult.setMessage("删除失败!");
                jsonResult.setData(null);
            }
        }
        else {
            jsonResult.setCode(20000);
            jsonResult.setMessage("删除失败!");
            jsonResult.setData(null);
        }
        resp.getWriter().println(jsonResult.toString());

    }

    @Override
    protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String option =req.getParameter("option");
        JsonResult jsonResult=new JsonResult();
        if (option.equals("update")){
            User user=new User();
            user.setId(Integer.parseInt(req.getParameter("id")));
            user.setName(req.getParameter("name"));
            user.setSex(req.getParameter("sex"));
            user.setPassword(req.getParameter("password"));
            SimpleDateFormat format= new SimpleDateFormat("yyyy-MM-dd");
            if (!req.getParameter("birthday").equals(""))
            {
                try {
                    user.setBirthday(new Date(format.parse(req.getParameter("birthday")).getTime()));
                } catch (ParseException e) {
                    user.setBirthday(null);
                }
            }
            if (userService.update(user)){
                jsonResult.setCode(200);
                jsonResult.setMessage("更新成功!");
                jsonResult.setData(null);
            }
            else {
                jsonResult.setCode(20000);
                jsonResult.setMessage("更新失败!");
                jsonResult.setData(null);
            }
        }
        else {
            jsonResult.setCode(20000);
            jsonResult.setMessage("添加失败!");
            jsonResult.setData(null);
        }
        resp.getWriter().println(jsonResult.toString());
    }
}

4.接口测试

4.1findAll操作

 

4.2getUserById操作

 

4.3save操作

 

4.4update操作

 

4.5delete操作

 

5.乱码问题解决

5.1解决方式1

在所有请求的方法中加入

 req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");

 

5.1解决方式2

需要配置过滤的路径

注意:/*不能写成/**

使用过滤器的方式

@WebFilter("/*")
public class EncodingFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            servletRequest.setCharacterEncoding("UTF-8");
            servletResponse.setCharacterEncoding("UTF-8");
            filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {

    }
}

 

如果有错误,欢迎大家批评指正!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/190178.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python中的垃圾回收机制

Python的垃圾回收主要以引用计数为主&#xff0c;分代回收为辅。引用计数在Python中&#xff0c;使用了引用计数这一技术实现内存管理。一个对象被创建完成后就有一个变量指向这个对象&#xff0c;那么就这个对象的引用计数为1&#xff0c;以后如果有其他变量指向这个对象&…

不吹牛,完爆ant design的定位组件,floating-ui来也

前言 因为要写react定位组件&#xff08;这不是标题党&#xff0c;就是完爆ant design的定位组件&#xff0c;你应该看到一半就会同意我的观点&#xff09;&#xff0c;如下图&#xff1a; 红框部分是用绝对定位放在按钮上面的&#xff0c;你们B端用的主流组件库都是这样实现的…

Python自动化小技巧14——自动批量发送邮件(带各种附件)

案例背景 我的博客下面评论都是各种要数据的......一个一个发其实很浪费时间的&#xff0c;每次输入评论者的邮箱&#xff0c;然后打开数据所在的文件夹&#xff0c;上传&#xff0c;填写标题正文&#xff0c;发送....... 一模一样的流程&#xff0c;所以这种重复性的劳动肯定…

Linux下 git 上传与删除 的基本指令

git的概述克隆仓库使用 git 上传文件删除 git 中的文件git的概述 Git 是一个免费并开源的分布式版本控制系统&#xff0c;可以快速高效地处理从小型到大型的各种项目。 在使用 git 应确保Linux系统中已安装有git 命令&#xff1a;git --version 作用&#xff1a;查看 git 是否…

Spring Boot 单元测试

文章目录1. 单元测试是什么2. 单元测试的优点3. 进行 Spring Boot 单元测试3.1 确认项目中已经内置了测试框架3.2 生成单元测试的类3.3 添加 SpringBootTest 注解3.4 添加单元测试的业务代码3.5 注解 Transactional4. 断言1. 单元测试是什么 单元测试&#xff0c;是指对软件中…

微信小程序022同学会学生会活动经费系统

同学会小程序采用B/S结构、java开发语言、以及Mysql数据库等技术。系统主要分为管理员端和用户端两部分&#xff0c;管理员管理主要功能包括&#xff1a;首页、个人中心、用户管理、共享账本管理、我的账本管理、经费信息管理、经费支出管理、活动信息、管理员管理、留言板管理…

分享怎么做公众号预约_美容院预约小程序开发制作功能介绍

小程序的功能首先是为美人有约客户提供更快选购、预约服务的线上工具&#xff0c;解决顾客对商品详情、线上购买、线上预约查看等各种服务需求。一、美容美发预约下单小程序主要功能有&#xff1a;首页&#xff1a;搜索、banner、金刚区、瓷片区、项目列表预约&#xff1a;单次…

Java技术栈,从入门到放弃,废了废了

Java技术路线应用框架后端Spring家族SpringIoCAOPSpring MVCSpring Boot自动配置、开箱即用整合Web整合数据库&#xff08;事务问题&#xff09;整合权限ShiroSpring Security整合中间件缓存MQRPC框架NIO框架服务器软件应用服务器TomcatJettyUndertowWeb服务器Nginx中间件缓存R…

Deathstalker的核心武器——Janicab新变种

01 概述 DeathStalker是一个专门针对金融机构和律师事务所进行攻击的组织&#xff0c;而Janicab是其所使用的比较古老的武器。 Janicab 首次在2013年被发现&#xff0c;它是能够运行在MacOS和Windows操作系统上的恶意软件。其中&#xff0c;Windows版本基于VBscript的植入作为…

【第27天】SQL进阶-查询优化- performance_schema系列实战三:锁问题排查(表级锁)(SQL 小虚竹)

回城传送–》《32天SQL筑基》 文章目录零、前言一、什么是表级锁二、什么时候适合加表级锁三、实战演练3.1 数据准备&#xff08;如果已有数据可跳过此操作&#xff09;3.2 开启第一个会话&#xff0c;执行显式加表级锁3.3 开启第二个会话&#xff0c;对该表执行update更新3.4 …

Vue 3.0 应用组件实例

#创建一个应用实例 每个 Vue 应用都是通过用 createApp 函数创建一个新的应用实例开始的&#xff1a; const app Vue.createApp({ /* 选项 */ }) 该应用实例是用来在应用中注册“全局”组件的。我们将在后面的指南中详细讨论&#xff0c;简单的例子&#xff1a; const app V…

jsp学生管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 jsp 学生管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开 发&#xff0c;数据库为Mysql&#xff0c;使用ja…

【Docker】基础使用

目录 一、Docker简介 二、Docker核心概念 三、Docker安装 四、Docker常用操作 1. 镜像操作 2. 容器操作 3. 安装MySQL 一、Docker简介 Docker 是一个开源的应用容器引擎&#xff0c;基于Go 语言并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖…

基于Springboot搭建java项目(二十二)——过滤器、监听器和拦截器的使用

过滤器、监听器和拦截器的使用 一、过滤器、监听器和拦截器总览 过滤器&#xff08;Filter&#xff09;监听器&#xff08;Listener&#xff09;拦截器&#xff08;Interceptor&#xff09;关注点web请求系统级别参数、对象Action&#xff08;部分web请求&#xff09;如何实现…

20230201在AIO-3568J开发板在原厂Android11下增加右键返回

20230201在AIO-3568J开发板在原厂Android11下增加右键返回 2023/2/1 8:37 百度搜索&#xff1a;RK3568 右键返回 Z:\rk3568_Android11.0_ap6257s\frameworks\native\services\inputflinger\reader\mapper\accumulator\CursorButtonAccumulator.cpp uint32_t CursorButtonAccumu…

【学习OpenCV4】如何学习OpenCV

OpenCV是应用非常广泛的开源视觉处理库&#xff0c;在图像处理、计算机视觉和自动驾驶中有着非常重要的作用。 废话不多说&#xff0c;我就来讲讲OpenCV的使用和学习需要怎么做吧&#xff0c;大家觉得有道理的可以参考一下。 我理解的学习和使用的重点在四个方面&#xff1a; …

PTA L1-019 谁先倒(详解)

前言&#xff1a;本期是关于谁先倒的详解&#xff0c;内容包括四大模块&#xff1a;题目&#xff0c;代码实现&#xff0c;大致思路&#xff0c;代码解读&#xff0c;今天你c了吗&#xff1f; 题目&#xff1a; 划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方…

多模态搜索的未来:超越关键字和向量的混合搜索!

二十年前&#xff0c;“混合”一词仅在植物学和化学领域使用。如今&#xff0c;“混合”这个概念在搜索领域一片繁荣&#xff0c;许多搜索系统都在推出基于 AI 技术的混合搜索方案。但是&#xff0c;“混合搜索”是真的具有应用价值&#xff0c;还只是流行的一阵风呢&#xff1…

深度学习:Self-Attention与Multi-heads Attention详解

深度学习&#xff1a;Self-Attention与Multi-heads Attention详解IntroductionSelf - AttentionMulti-Head AttentionPosition- EncodingIntroduction Transformer 最初是由 Ashish Vaswani等人提出的一种用以完成机器翻译的 Seq2Seq 学习任务的全新网络结构&#xff0c;它完全…

nginx学习笔记9(小滴课堂)

业界主流高可用方案Linux虚拟服务器 LVS讲解 这部分因为需要多台虚拟机&#xff0c;所以我先不实操。 Keepalived核心配置讲解 echo "" > keepalived.conf是清空文件中的内容。 从机的优先级可以写的比master的优先级低一些。 准备NginxLvsKeepAlive相关软件环境 …