javaweb 实现数据的增删改查及其分页(使用数据库连接池和工具类)
学生信息
发布日期:2022-02-01 14:28:18
浏览次数:37
分类:技术文章
本文共 13055 字,大约阅读时间需要 43 分钟。
创建数据库表
字段如下: 然后 创建实体类Student 与表中字段名对应 (domain包)public class Student { private Integer id; private String name; private String age; private String address; public Student() { } public Student(Integer id, String name, String age, String address) { this.id = id; this.name = name; this.age = age; this.address = address; } @Override public String toString() { return "Student{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + ", address='" + address + '\'' + '}'; } 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 getAge() { return age; } public void setAge(String age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; }}//另外PageBean类 封装分页所需要的属性public class PageBean{ private int pageNum;//当前页面页码 private int pageSize;//页面大小 private long totleSize;//总数据数 private int pageCount;//总页数 private List data;//当前页面数据 集合 存放对象 public PageBean(int pageNum, int pageSize, long totleSize, List data) { this.pageNum = pageNum; this.pageSize = pageSize; this.totleSize = totleSize; this.data = data; //这里总页数不用传参构造 直接计算出来(总数据和页面大小相除) pageCount= (int) (totleSize%pageSize==0?totleSize/pageSize:totleSize/pageSize+1); } public PageBean() { } public int getPageNum() { return pageNum; } public void setPageNum(int pageNum) { this.pageNum = pageNum; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public long getTotleSize() { return totleSize; } public void setTotleSize(long totleSize) { this.totleSize = totleSize; } public int getPageCount() { return pageCount; } public void setPageCount(int pageCount) { this.pageCount = pageCount; } public List getData() { return data; } public void setData(List data) { this.data = data; }}
创建数据库工具类 放在 utils包
public class DataSourceUtils {//使用的是阿里的Druid连接池 private static DruidDataSource dataSource; static { Properties properties=new Properties(); InputStream in = DataSourceUtils.class.getClassLoader().getResourceAsStream("druid.properties"); try { properties.load(in); dataSource= (DruidDataSource) DruidDataSourceFactory.createDataSource(properties); } catch (Exception e) { e.printStackTrace(); System.out.println("初始化连接池失败"); } } //获得连接池的方法 用于工具类操作时据库当作参数传递过去 public static DataSource getDataSource(){ return dataSource; }}//判断字符床是否为空的工具类,用于下面的pageNum和pageSize判断public class StringUtils { public static boolean isEmpty(String s){ if(s==null||s.trim().length()==0){ return true; }else { return false; } }}
接下来 创建StudentDao接口 和其实现类 Dao是用来操作数据库的 (dao包)
//j接口public interface StudentDao { //查找当前页面数据 ListfindPage(int pageNum,int PageSize); void add(Student student); //获取数据总数 long getCount(); void delete(Integer id); Student queryById(Integer id); void update(Student student);}//实现类public class StudentDaoImpl implements StudentDao { @Override //获取当前页面的数据 是一个集合 存放学生对象 public List findPage(int pageNum, int PageSize) { QueryRunner qr=new QueryRunner(DataSourceUtils.getDataSource()); try { return qr.query("select * from student order by id limit ?,?",new BeanListHandler (Student.class),(pageNum-1)*PageSize,PageSize); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("获取分页失败",e); } } @Override public void add(Student student) { QueryRunner qr=new QueryRunner(DataSourceUtils.getDataSource()); Object[] params={null,student.getName(),student.getAge(),student.getAddress()}; try { qr.update("insert into student values(?,?,?,?)",params); } catch (SQLException e) { e.printStackTrace(); } } @Override //获取总数据条数 public long getCount() { QueryRunner qr=new QueryRunner(DataSourceUtils.getDataSource()); try { return qr.query("select count(*) from student",new ScalarHandler<>());//使用工具类的,new ScalarHandler<>() } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("获取数据总数失败",e); } } @Override public void delete(Integer id) { //根据学号删除学生 QueryRunner qr=new QueryRunner(DataSourceUtils.getDataSource()); try { qr.update("delete from student where id=?",id); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("删除失败",e); } } @Override public Student queryById(Integer id) { QueryRunner qr=new QueryRunner(DataSourceUtils.getDataSource()); try { return qr.query("select * from student where id=?",new BeanHandler (Student.class),id); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("查询失败",e); } } @Override public void update(Student student) { QueryRunner qr=new QueryRunner(DataSourceUtils.getDataSource()); Object[] params={student.getName(),student.getAge(),student.getAddress(),student.getId()}; try { qr.update("update student set name=?,age=?,address=? where id=?",params); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("修改失败",e); } }}
接下来是StudentService接口 及其实现类 (Service包)
//接口public interface StudentService { //分页属性太多 封装成pagebean PageBeanfindPage(int pageNum, int pageSize); void add(Student student); void delete(Integer id); Student queryById(Integer id); void update(Student student);}//实现类public class StudentServiceImpl implements StudentService { StudentDao studentDao=new StudentDaoImpl(); @Override //这里将分页属性封装到pageBean中 此方法 返回pageBean对象 public PageBean findPage(int pageNum, int pageSize) { //获取页面数据 List data = studentDao.findPage(pageNum, pageSize); long totleSize = studentDao.getCount();//获取总数据 //封装 PageBean pageBean=new PageBean<>(pageNum,pageSize,totleSize,data); return pageBean; } @Override public void add(Student student) { studentDao.add(student); } @Override public void delete(Integer id) { studentDao.delete(id); } @Override public Student queryById(Integer id) { return studentDao.queryById(id); } @Override public void update(Student student) { studentDao.update(student); }}
然后是servlet 分为 增加,删除,修改,查询 (Servlet包内容)
//增加 从注册界面 接收数据 增加到数据库@WebServlet(name = "AddServlet",value = "/add")public class AddServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); String name = request.getParameter("name"); String age = request.getParameter("age"); String address = request.getParameter("address"); Student student=new Student(null,name,age,address); StudentService studentService=new StudentServiceImpl(); studentService.add(student); response.sendRedirect("/0905web02_war_exploded/stulist"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); }}//删除 @WebServlet(name = "DeleteServlet",value = "/delete")public class DeleteServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); StudentService service=new StudentServiceImpl(); Integer id = Integer.parseInt(request.getParameter("id")); service.delete(id); response.sendRedirect("/0905web02_war_exploded/stulist"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); }}//修改 先转到按学号查询的servlet,再传到学生信息的页面 最后到修改界面 修改//按学号查询@WebServlet(name = "QueryByIdServlet",value = "/querybyid")public class QueryByIdServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Integer id = Integer.parseInt(request.getParameter("id")); StudentService service=new StudentServiceImpl(); Student student = service.queryById(id); request.setAttribute("student",student); request.getRequestDispatcher("info.jsp").forward(request,response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); }}//修改servlet@WebServlet(name = "UpdateServlet",value = "/update")public class UpdateServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); //使用传统的封装 /* Integer id = Integer.parseInt(request.getParameter("id")); String name = request.getParameter("name"); String age = request.getParameter("age"); String address = request.getParameter("address"); Student student=new Student(id,name,age,address);*/ Student student =new Student(); try { //使用BeanUtils工具类优化 BeanUtils.populate(student,request.getParameterMap()); } catch (Exception e) { e.printStackTrace(); } StudentService service=new StudentServiceImpl(); service.update(student); response.sendRedirect("/0905web02_war_exploded/stulist"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); }}//最后是查询当前页面的学生 @WebServlet(name = "StudentListServlet",value = "/stulist")public class StudentListServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String pageNum = request.getParameter("pageNum"); String pageSize = request.getParameter("pageSize"); int pn=1;//默认页数 int ps=5;//默认页面大小 //StringUtils判断拿到的字符串是否为空 if(!StringUtils.isEmpty(pageNum)){ pn = Integer.parseInt(pageNum); if(pn<=0){ pn=1; } } if(!StringUtils.isEmpty(pageSize)){ ps = Integer.parseInt(pageSize); if(ps<=0){ ps=5; } } StudentService service=new StudentServiceImpl(); PageBeanpageBean = service.findPage(pn, ps); request.setAttribute("pageBean",pageBean);//将分页信息封装到pagebean中 放到request转发到信息显示页面stuinfo.jsp request.getRequestDispatcher("stuinfo.jsp").forward(request,response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); }}
接下来是前端页面
学生信息显示界面 可用于修改数据<%@ page contentType="text/html;charset=UTF-8" language="java" %>主页面 显示学生信息 用到了jstl中的遍历 需要导包 <%@ page contentType="text/html;charset=UTF-8" language="java" %><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>详细信息 这里在表单中修改完数据 直接 传到修改servlet中 操作数据库更改数据
id | 姓名 | 年龄 | 地址 | 操作 | |
${stu.id} | ${stu.name} | ${stu.age} | ${stu.address} | 删除 | 修改 |
Durid连接池的配置文件:druid.properties
#连接设置driverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/gogogo?useSSL=true&characterEncoding=utf8username=rootpassword=123456# initialSize=10#最大连接数量maxActive=50# minIdle=5# maxWait=5000
本次所用到的jar包
及其数据库连接池配置文件转载地址:https://blog.csdn.net/shunshizhen120412/article/details/100638893 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2024年03月21日 07时27分52秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
pac代理模式什么意思_托管仓库租赁电商仓储运营模式托管什么意思
2019-04-21
validated 验证数组_在 Laravel 中处理请求验证的智能方法
2019-04-21
java 拼接路径优雅方式_Java安全编码实践总结
2019-04-21
realme x2 深度测试打不开_搭载65W超级闪充,realme真我X7手机充电评测
2019-04-21
整数取反编程_【每日编程185期】数字的补数
2019-04-21
能用别的软件吗_手机软件能用蓝牙传送吗
2019-04-21
为什么图片要2的倍数_为什么宝宝喜欢流“口水”?这种2种原因父母要知道,建议收藏...
2019-04-21
下载了XAMPP怎样打开MYSQL_xampp mysql安装启动
2019-04-21
pdo转mysql_mysql转mysqli或pdo
2019-04-21
mysql如果没有表就创建_mysql – 改变表是否存在或创建如果没有
2019-04-21
ireport连接mysql_ireport 4.5教程之数据源介绍
2019-04-21
mysql多维模型_数据仓库数据库设计方法---关系模型和多维模型比较分析
2019-04-21
局域网聊天程序 java MySQL_java 基于TCP/IP协议的局域网聊天小程序
2019-04-21
r glm 中的p值_假设检验中的P值
2019-04-21
mysql中sql语句结构_MySQL中使用sql语句获得表结构
2019-04-21
如何增加mysql主键约束_mysql修改表时怎么添加主键约束?
2019-04-21
java选择路径窗口_Java实现选择电脑路径的方法
2019-04-21
冒泡排序面向对象java_所谓的面向对象实现的冒泡排序
2019-04-21