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 {    //查找当前页面数据    List
findPage(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    PageBean
findPage(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();        PageBean
pageBean = 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" %>    详细信息这里在表单中修改完数据  直接 传到修改servlet中  操作数据库更改数据
学生id:
学生姓名:
学生年龄:
学生地址:
主页面 显示学生信息 用到了jstl中的遍历 需要导包 <%@ page contentType="text/html;charset=UTF-8" language="java" %><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 学生信息
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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:过滤器的基本配置以及几个典型案例(实现自动登录,屏蔽脏词,禁止浏览器缓存动态页面,带缓存过滤器)
下一篇:shiro的作用和执行流程总结

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年03月21日 07时27分52秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

pac代理模式什么意思_托管仓库租赁电商仓储运营模式托管什么意思 2019-04-21
validated 验证数组_在 Laravel 中处理请求验证的智能方法 2019-04-21
洞泾智能机器人产业基地_G60科创走廊洞泾人工智能产业基地(核心区块)暨洞泾镇招商人员培训班顺利开班... 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 图像渐变_Java基础之在窗口中绘图——渐变填充(GradientApplet 1) 2019-04-21
冒泡排序面向对象java_所谓的面向对象实现的冒泡排序 2019-04-21