简单增删查改案例jdbc + Servlet + jsp
1.创建数据库
1.1数据字典
字段 | 数据类型 | 约束 | 描述 |
---|---|---|---|
id | int(11) | 主键 自增 | 用户id |
username | varchar(20) | 唯一 | 用户姓名 |
password | varchahr(20) | 默认为空 | 用户密码 |
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相关推荐
- axios 的简单增删查改 使用json-server启动的josn
使用axios 获取json-server启动的json数据 进行增删查改 一.启动json-server 1.1启动 json-server是用来模仿后台接口而使用的. 安装:npm install ...
- 浅谈IDEA中JBDC的简单增删查改操作及简单封装
连接数据库 1.加载驱动 Class.forName("com.mysql.jdbc.Driver"); 本行代码主要作用是加载(注册)数据库驱动(到JVM) 2.创建链接 Con ...
- python-类思想-实现简单增删查改
class Person:def __init__(self,name, phone):self.UserInfo = {'name': name,'phone': phone}class Opt:d ...
- 支持增删查改的简单Java Web通讯录详细教程【基于Mac OS+IDEA+Servlet+JDBC+Tomcat】
本文将以Web版通讯录的形式介绍一个支持简单增删查改的Java Web项目,软硬件环境基于Macbook Air M2+macOS Ventura 13.1+IntelliJ IDEA 2022,技术 ...
- mysql员工管理系统_简单的员工管理系统(Mysql+jdbc+Servlet+JSP)
java java8 java开发 简单的员工管理系统(Mysql+jdbc+Servlet+JSP) 员工管理系统 因为学业要求,需要完成一个过关检测,但是因为检测之前没有做好准备,且想到之前用my ...
- Java JDBC篇2——JDBC增删查改
Java JDBC篇2--JDBC增删查改 url=jdbc:mysql://localhost:3306/test user=root password=blingbling123. driver= ...
- SpringBoot整合Mybatis-plus实现增删查改
今天给大家分享一下SpringBoot整合Mybatis-plus的增删查改案例. pom.xml <?xml version="1.0" encoding="UT ...
- 初学jsp课,一个基于jsp+javabean+servlet+sql server小型房源网站,实现了用户表,房源表,及留言板的增删查改。使用deamwear编译器
1 设计目的 <Web应用开发课程设计>是实践性教学环节之一,是<Web程序设计>课程的辅助教学课程.通过课程设计,使学生掌握Web网站的基本概念,结合实际的操作和设计,巩固课 ...
- 只需一行代码实现增删查改,微软已经让我们很简单。谈AccessDataSource的使用。...
这是一个很简单的内容.日常我们总腻烦做增删查改这样的重复性的劳动,如果你的项目不是太大,如果你的团队很小,或许就是你一个人,那么就完全可以参考以下这样简单的方式.微软已经给我们做了.我们只要写一行代码 ...
最新文章
- 你可以恢复模糊的图像吗?
- 《系统集成项目管理工程师》必背100个知识点-51项目人力资源管理
- 什么事数据科学_如果您想进入数据科学,则必须知道的7件事
- jquery 鼠标事件汇总
- python实现图灵机器人帮你回复微信好友消息
- php绘制雪花墙,基于雪花算法的 PHP ID 生成器
- 32位单精度浮点数表示法
- QBlog V2.5 源码开放下载(ASP.NET 番外系列之开端)
- esp8266教程:网络基础知识
- 1、mysql创建事件
- 【Python】在Windows 10 中,安装django-bootstrap-modal-forms
- Effective C++ NVI手法
- 腾讯云全站加速有哪些功能?有哪些优势?适用于什么场景?
- 旺旺号userid转换店铺shopid和评分性别
- 文献阅读---多年生黑麦草种质中与耐热性相关的生理性状、分子标记和叶绿素分解代谢基因的自然变异
- 光模块字母含义及参数简称大全
- 基于微信云开发的商家转账至零钱
- 10_Linux ARM架构-离线部署 Docker + MongoDB-银河麒麟V10操作系统
- MFC不同窗口之间传递数据
- D. Very Suspicious