1.创建数据库

1.1数据字典

字段 数据类型 约束 描述
id int(11) 主键 自增 用户id
username varchar(20) 唯一 用户姓名
password varchahr(20) 默认为空 用户密码
email varchar(30) 默认为空 用户邮箱

1.2数据库新建user表

create table t_user(id int(11) primary key  auto_increment,username varchar(20) unique not null,password varchar(32) ,email varchar(200)
)charset=utf8;

1.3初始化数据

insert into t_user values(1,'李四','12345','149@qq.com');
insert into t_user values(2,'张三','12345','149@qq.com');
insert into t_user values(3,'tom','12345','149@qq.com');
insert into t_user values4,'jack','12345','149@qq.com');

2编写代码

新建javaee项目导入jar包和创建druid.properties配置文件

2.1创建项目

整个项目目录结构

2.2导包写工具类

在src目录下创建Utils工具包编写数据库连接工具

Env.java

package utlis;import java.io.IOException;
import java.util.Properties;//通过单例设计模式读取配置文件的信息
public class Env extends Properties {//单例设计模式的写法private static Env instance = null;private Env(){try {load(Env.class.getResourceAsStream("/druid.properties"));} catch (IOException e) {e.printStackTrace();}}public static Env getInstance(){if(instance == null){instance = new Env();}return instance;}
}

在src包下创建test包测试Env

EnvTest.java

package test;import org.junit.Test;
import utlis.Env;import static org.junit.Assert.*;public class EnvTest {@Testpublic void getInstance() {System.out.println(Env.getInstance().getProperty("url"));}
}

编写数据库工具类

DBPoolUtil.java

package utlis;import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;import javax.sql.DataSource;
import java.util.Properties;public class DBPoolUtil {//创建DateSource资源private static DruidDataSource dataSource = null;static {Properties p = new Properties();try {dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(p);//通过Env读取配置文件dataSource.setDriverClassName(Env.getInstance().getProperty("driverClassName"));dataSource.setUrl(Env.getInstance().getProperty("url"));dataSource.setUsername(Env.getInstance().getProperty("username"));dataSource.setPassword(Env.getInstance().getProperty("password"));} catch (Exception e) {e.printStackTrace();}}public static DataSource getDataSource(){return dataSource;}}

2.3 IDEA连接数据库

(可不实现这一步骤)

测试连接出现问题(是因为没有设置时区)

解决方法

https://blog.csdn.net/qq_31762741/article/details/115184255

问题解决好后点击应用

2.4创建实体类

在src目录下创建entity包后在数据库中自动生成实体类

在entity包中创建User类

package entity;public class User {private int id;private String username;private String password;private String email;public User() {}public User(int id, String username, String password, String email) {this.id = id;this.username = username;this.password = password;this.email = email;}public long getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", password='" + password + '\'' +", email='" + email + '\'' +'}';}
}

2.5 创建dao层

在src下创建dao包在包下创建Impl包和IUser接口

接口IUserDao.java

package dao;import entity.User;import java.util.List;public interface IUserDao {//查所有List<User> getAll();//分页查List<User> getByPage(int cp,int ns);//根据id查User getById(int id);//增加int save(User user);//修改int update(User user);//删除int delete(int id);//查询数量long getCount();
}

Impl包下的IUserDaoImpl实现类

package dao.impl;import dao.IUserDao;
import entity.User;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import utlis.DBPoolUtil;import java.sql.SQLException;
import java.util.List;public class IUserDaoImpl implements IUserDao {QueryRunner qr = new QueryRunner(DBPoolUtil.getDataSource());@Overridepublic List<User> getAll() {try {return qr.query("select * from t_user ",new BeanListHandler<User>(User.class));} catch (SQLException throwables) {throwables.printStackTrace();}return null;}@Overridepublic List<User> getByPage(int cp,int ns) {int si = (cp - 1) * ns;try {return qr.query("select * from t_user limit ?,?",new BeanListHandler<User>(User.class),si,ns);} catch (SQLException throwables) {throwables.printStackTrace();}return null;}@Overridepublic User getById(int id) {try {return qr.query("select * from t_user where id = ?",new BeanHandler<User>(User.class),id);} catch (SQLException throwables) {throwables.printStackTrace();}return null;}@Overridepublic int save(User user) {try {return qr.update("insert into t_user values(?,?,?,?)",user.getId(),user.getUsername(),user.getPassword(),user.getEmail());} catch (SQLException throwables) {throwables.printStackTrace();}return 0;}@Overridepublic int update(User user) {try {return qr.update("update t_user set username =?, password = ?,email =? where id =?",user.getUsername(),user.getPassword(),user.getEmail(),user.getId());} catch (SQLException throwables) {throwables.printStackTrace();}return 0;}@Overridepublic int delete(int id) {try {return qr.update("delete from t_user where id = ?",id);} catch (SQLException throwables) {throwables.printStackTrace();}return 0;}@Overridepublic long getCount() {try {return qr.query("select count(1) from t_user",new ScalarHandler<>());} catch (SQLException throwables) {throwables.printStackTrace();}return 0;}
}

test包下的IUserDaoImplTest类

package test;import dao.IUserDao;
import dao.impl.IUserDaoImpl;
import entity.User;
import org.junit.Test;import java.util.List;import static org.junit.Assert.*;public class IUserDaoImplTest {private IUserDaoImpl iUserDao = new IUserDaoImpl();@Testpublic void getAll() {List<User> list = iUserDao.getAll();for (User user : list) {System.out.println(user);}}@Testpublic void getByPage() {List<User> list = iUserDao.getByPage(1,3);for (User user : list) {System.out.println(user);}}@Testpublic void getById() {User user = iUserDao.getById(1);System.out.println(user);}@Testpublic void save() {User user = new User(5,"猪猪","1235","hhi@com");int save = iUserDao.save(user);System.out.println(save);}@Testpublic void update() {User user = new User(5,"猪猪boy","1235","hhi@com");int update = iUserDao.update(user);System.out.println(update);}@Testpublic void delete() {int delete = iUserDao.delete(5);System.out.println(delete);}@Testpublic void getCount() {long count = iUserDao.getCount();System.out.println(count);}
}

2.6创建service层

在src包下创建Service包 创建IUserService接口和impl包

接口IUserService.java

package service;import entity.User;import java.util.List;public interface IUserService {//查所有List<User> getAll();//分页查List<User> getByPage(int cp,int ns);//根据id查User getById(int id);//增加boolean save(User user);//修改boolean update(User user);//删除boolean delete(int id);//查询数量long getCount();
}

在impl包下创建实体类

IUserServiceImpl.java

package service.impl;import dao.IUserDao;
import dao.impl.IUserDaoImpl;
import entity.User;
import service.IUserService;import java.util.List;public class IUserServiceImpl implements IUserService {private IUserDao iUserDao = new IUserDaoImpl();@Overridepublic List<User> getAll() {return iUserDao.getAll();}@Overridepublic List<User> getByPage(int cp, int ns) {return iUserDao.getByPage(cp,ns);}@Overridepublic User getById(int id) {return iUserDao.getById(id);}@Overridepublic boolean save(User user) {return iUserDao.save(user)>0;}@Overridepublic boolean update(User user) {return iUserDao.update(user)>0;}@Overridepublic boolean delete(int id) {return iUserDao.delete(id)>0;}@Overridepublic long getCount() {return iUserDao.getCount();}
}

2.7 创建测试类

创建单元测试类IUserServiceImplTest.java

package test;import entity.User;
import org.junit.Test;
import service.impl.IUserServiceImpl;import java.util.List;public class IUserServiceImplTest {private IUserServiceImpl iUserService = new IUserServiceImpl();@Testpublic void getAll() {List<User> list = iUserService.getAll();for (User user : list) {System.out.println(user);}}@Testpublic void getByPage() {List<User> list = iUserService.getByPage(1,3);for (User user : list) {System.out.println(user);}}@Testpublic void getById() {User byId = iUserService.getById(1);System.out.println(byId);}@Testpublic void save() {boolean save = iUserService.save(new User(6, "杰克", "12345", "ajjj@qq.com"));System.out.println(save);}@Testpublic void update() {boolean update = iUserService.update(new User(6, "杰克666", "12345", "ajjj@qq.com"));System.out.println(update);}@Testpublic void delete() {boolean delete = iUserService.delete(6);System.out.println(delete);}@Testpublic void getCount() {long count = iUserService.getCount();System.out.println(count);}
}

2.8创建fifter包

CharacterFilter.java

package filter;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;@WebFilter(filterName = "CharacterFilter",value = "/*")
public class CharacterFilter implements Filter {public void destroy() {}public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {req.setCharacterEncoding("UTF-8");resp.setCharacterEncoding("UTF-8");resp.setContentType("text/html;charset=UTF-8");chain.doFilter(req, resp);}public void init(FilterConfig config) throws ServletException {}}

2.9创建controller包

创建BaseServlet.java

package controller;import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;public class BaseServlet extends HttpServlet {@Overridepublic void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {String op = req.getParameter("op");if(op == null){op = "getAll";}if(op != null){try {Method method = getClass().getDeclaredMethod(op, HttpServletRequest.class, HttpServletResponse.class);method.setAccessible(true);method.invoke(this,req,res);} catch (NoSuchMethodException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}}}
}

3.整合前端页面

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>$Title$</title></head><body><a href="UserServlet">all User</a></p></body>
</html>

修改Tomcat的名字和默认路径

3.1导包(JSTL使用)

导入jstl所需要的jar包

3.2 查找所有

UserServlet.java

package controller;import entity.User;
import service.IUserService;
import service.impl.IUserServiceImpl;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 java.io.IOException;
import java.util.List;@WebServlet(name = "UserServlet",value = "/UserServlet")
public class UserServlet extends BaseServlet{private IUserService iUserService = new IUserServiceImpl();protected void getAll(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String op = req.getParameter("op");req.setAttribute("op",op);//得到数据库中的用户信息List<User> list = iUserService.getAll();//将用户信息保存在域中req.setAttribute("Users",list);//页面转发到users.jsp页面  查找用页面转发需要共享数据 增删改用重定向req.getRequestDispatcher("users.jsp").forward(req,resp);}
}

3.2.1

在web目录下新建pages包存放jsp页面

新建users.jsp页面 table的属性样式一定要正确不然出不来


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head><title>users</title>
</head>
<body>
<c:if test="${users == null || users.size()==0}">no date
</c:if>
<c:if test="${users != null || users.size()!=0}"><table border="1" align="center" width="80%"><tr><th>id</th><th>name</th><th>password</th><th>email</th><th>manger</th></tr><c:forEach items="${users}" var="p"><tr><td>${p.id}</td><td>${p.username}</td><td>${p.password}</td><td>${p.email}</td><td><a href="#">修改</a><a href="#">删除</a></td></tr></c:forEach></table>
</c:if>
</body>
</html>

3.2.2实现效果

3.3修改操作

3.3.1首先修改users.jsp页面修改的链接地址

<a href="UserServlet?op=getById&id=${p.id}">修改</a>

3.3.2在web/pages/user包下添加user.jsp

<%--Created by IntelliJ IDEA.User: ylkDate: 2022/8/27Time: 16:21To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>user</title>
</head>
<body><form method="post" action="UserServlet"><input type="hidden" name="op" value="update"></p>id:<input type="text" name="id" value="${user.id}" readonly="readonly"></p>username:<input type="text" name="name" value="${user.username}"></p>Password:<input type="text" name="password" value="${user.password}"></p>email:<input type="text" name="email" value="${user.email}"></p><input type="submit" value="修改"></p>
</form>
</body>
</html>

3.3.3在UserServlet.java中添加通过id查找和修改的方法

protected void getById(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//从页面获取id的值String id = req.getParameter("id");int byId = id ==null?0:Integer.parseInt(id);//调用service层获取User对象User user = iUserService.getById(byId);//把对象保存到域中req.setAttribute("user",user);//页面转发到到/pages/user/user.jspreq.getRequestDispatcher("/pages/user/user.jsp").forward(req, resp);}protected void update(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String id = req.getParameter("id");int id2 = id ==null ? 0 : Integer.parseInt(id);String name = req.getParameter("name");String password = req.getParameter("password");String email = req.getParameter("email");boolean update = iUserService.update(new User(id2, name, password, email));if(update){resp.sendRedirect("UserServlet");}}

3.4删除操作

3.4.1首先修改users.jsp页面修改的链接地址

<a href="UserServlet?op=delete&id=${p.id}">删除</a>

3.4.2添加删除方法

 protected void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String id = req.getParameter("id");int id2 = id ==null ? 0 : Integer.parseInt(id);boolean delete = iUserService.delete(id2);if(delete){resp.sendRedirect("UserServlet");}

3.5添加操作

3.5.1添加超链接语句

<a href="/demo/pages/user/saveUser.jsp">添加</a>

3.5.2在web/pages/user包下添加saveUser.jsp

<%--Created by IntelliJ IDEA.User: ylkDate: 2022/8/27Time: 16:43To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>saveUser</title>
</head>
<body>
<form method="post" action="../../UserServlet"><input type="hidden" name="op" value="save"></p>id:<input type="text" name="id" ></p>username:<input type="text" name="name" ></p>Password:<input type="text" name="password" ></p>email:<input type="text" name="email" ></p><input type="submit" value="添加"></p>
</form>
</body>
</html>

3.5.3在UserServlet中添加方法

 protected void save(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String id = req.getParameter("id");int id2 = id ==null ? 0 : Integer.parseInt(id);String name = req.getParameter("name");String password = req.getParameter("password");String email = req.getParameter("email");boolean save = iUserService.save(new User(id2, name, password, email));if(save){resp.sendRedirect("UserServlet");}
}
le>
</head>
<body>
<form method="post" action="../../UserServlet"><input type="hidden" name="op" value="save"></p>id:<input type="text" name="id" ></p>username:<input type="text" name="name" ></p>Password:<input type="text" name="password" ></p>email:<input type="text" name="email" ></p><input type="submit" value="添加"></p>
</form>
</body>
</html>

简单增删查改案例jdbc + Servlet + jsp相关推荐

  1. axios 的简单增删查改 使用json-server启动的josn

    使用axios 获取json-server启动的json数据 进行增删查改 一.启动json-server 1.1启动 json-server是用来模仿后台接口而使用的. 安装:npm install ...

  2. 浅谈IDEA中JBDC的简单增删查改操作及简单封装

    连接数据库 1.加载驱动 Class.forName("com.mysql.jdbc.Driver"); 本行代码主要作用是加载(注册)数据库驱动(到JVM) 2.创建链接 Con ...

  3. python-类思想-实现简单增删查改

    class Person:def __init__(self,name, phone):self.UserInfo = {'name': name,'phone': phone}class Opt:d ...

  4. 支持增删查改的简单Java Web通讯录详细教程【基于Mac OS+IDEA+Servlet+JDBC+Tomcat】

    本文将以Web版通讯录的形式介绍一个支持简单增删查改的Java Web项目,软硬件环境基于Macbook Air M2+macOS Ventura 13.1+IntelliJ IDEA 2022,技术 ...

  5. mysql员工管理系统_简单的员工管理系统(Mysql+jdbc+Servlet+JSP)

    java java8 java开发 简单的员工管理系统(Mysql+jdbc+Servlet+JSP) 员工管理系统 因为学业要求,需要完成一个过关检测,但是因为检测之前没有做好准备,且想到之前用my ...

  6. Java JDBC篇2——JDBC增删查改

    Java JDBC篇2--JDBC增删查改 url=jdbc:mysql://localhost:3306/test user=root password=blingbling123. driver= ...

  7. SpringBoot整合Mybatis-plus实现增删查改

    今天给大家分享一下SpringBoot整合Mybatis-plus的增删查改案例. pom.xml <?xml version="1.0" encoding="UT ...

  8. 初学jsp课,一个基于jsp+javabean+servlet+sql server小型房源网站,实现了用户表,房源表,及留言板的增删查改。使用deamwear编译器

    1 设计目的 <Web应用开发课程设计>是实践性教学环节之一,是<Web程序设计>课程的辅助教学课程.通过课程设计,使学生掌握Web网站的基本概念,结合实际的操作和设计,巩固课 ...

  9. 只需一行代码实现增删查改,微软已经让我们很简单。谈AccessDataSource的使用。...

    这是一个很简单的内容.日常我们总腻烦做增删查改这样的重复性的劳动,如果你的项目不是太大,如果你的团队很小,或许就是你一个人,那么就完全可以参考以下这样简单的方式.微软已经给我们做了.我们只要写一行代码 ...

最新文章

  1. 你可以恢复模糊的图像吗?
  2. 《系统集成项目管理工程师》必背100个知识点-51项目人力资源管理
  3. 什么事数据科学_如果您想进入数据科学,则必须知道的7件事
  4. jquery 鼠标事件汇总
  5. python实现图灵机器人帮你回复微信好友消息
  6. php绘制雪花墙,基于雪花算法的 PHP ID 生成器
  7. 32位单精度浮点数表示法
  8. QBlog V2.5 源码开放下载(ASP.NET 番外系列之开端)
  9. esp8266教程:网络基础知识
  10. 1、mysql创建事件
  11. 【Python】在Windows 10 中,安装django-bootstrap-modal-forms
  12. Effective C++ NVI手法
  13. 腾讯云全站加速有哪些功能?有哪些优势?适用于什么场景?
  14. 旺旺号userid转换店铺shopid和评分性别
  15. 文献阅读---多年生黑麦草种质中与耐热性相关的生理性状、分子标记和叶绿素分解代谢基因的自然变异
  16. 光模块字母含义及参数简称大全
  17. 基于微信云开发的商家转账至零钱
  18. 10_Linux ARM架构-离线部署 Docker + MongoDB-银河麒麟V10操作系统
  19. MFC不同窗口之间传递数据
  20. D. Very Suspicious

热门文章

  1. MyEclipse简介及应用
  2. 别再推荐使用 jsoncpp 了
  3. Linq学习——gridview实现双向排序
  4. DBCO-PEG-IR825|IR825-PEG-DBCO|二苯并环辛炔-聚乙二醇-IR825荧光染料|DBCO-PEG-IR-825荧光染料
  5. 水平集方法的一个基本框架
  6. html怎么转换成xcl,XCLWinKits
  7. 计算输入日期的前一天
  8. Qualcomm messaging Interface(QMI)消息定义概述
  9. Andorid一些知识点
  10. laytpl语法_适应laytpl 渲染模板数据