java列表mvc分页,MVC模式实现分页案例(java)

本文详细介绍了Java Web应用程序中的分页技术,包括分页的重要性、实现思路、步骤及代码实现。通过实例展示了如何使用Druid数据源、SQL LIMIT 分页、DAO层和Service层接口来处理分页查询,以及在JSP页面中展示分页结果。同时,提供了判断参数是否为空的工具类和PageBean实体类用于存储分页数据。
摘要由CSDN通过智能技术生成

必须掌握分页案例

Ŀ¼

1.分页概述

分页是web应用程序非常重要的一个技术。数据库中的数据可能是成千上万的,不可能把这么多的数据一次显示在浏览器上面。一般根据每行数据在页面上所占的空间每页显示若干行,比如一般20行是一个比较理想的显示状态。

2.分页实现思路

分页的思路

对于海量的数据查询,需要多少就取多少,显然是最佳的解决方法,假如某个表中有200万条记录,第一页取前20条,第二页取21~40条记录。

select * from 表名 order by id limit 0,20 ;

select * from 表名 order by id limit 20,20;

select * from 表名 order by id limit 40,20;

3.分页步骤

步骤:

1.确定每页显示的数据数量

2.确定分页显示所需的总页数

3.编写SQL查询语句,实现数据查询

4.在JSP页面中进行分页显示设置

4.分页代码实现

4.1 创建工程,并导入相关jar包

利用MVC模式将项目分成web、service、dao、domain四部分代码,以及对数据库操作需要设计的工具类utils

9ff3ef0b04f84c29d44f2a457b762bab.png

相关jar包,jar包一定要放在web/WEB-INF/lib目录下(lib是自己创建的文件夹,放错导致项目出错,找不到资源)

91509740c6bad61f88f08afa156d7d9b.png

4.2数据库配置文件druid.properties

因为该项目使用阿里的连接池,所以对应阿里的配置文件 #连接设置

driverClassName=com.mysql.jdbc.Driver

url=jdbc:mysql://localhost:3306/myschool?useSSL=true&characterEncoding=utf8

username=root

password=root

#

initialSize=10

#最大连接数量

maxActive=50

#

minIdle=5

#

maxWait=5000

4.3创建工具类和实体类 连接池工具类,用来连接数据库,对数据库进行相应操作,一般将公用代码封装成工具类,以便重用

DataSourceUtils 类 public class DataSourceUtils { private static DruidDataSource dataSource; static { try { //加载配置文件 Properties prop = new Properties(); InputStream is = DataSourceUtils.class.getClassLoader().getResourceAsStream("druid.properties"); prop.load(is); is.close(); //创建连接池 dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(prop); } catch (Exception e) { e.printStackTrace(); } } //获取连接的静态方法 public static DataSource getDataSource(){ return dataSource; } }

IsEmptyUtils 类 判断是否为空 判断从客户端接收的参数 public class IsEmptyUtils { public static boolean isEmpty(String str){ if(str==null||str.trim().length()==0){ return true; } return false; } }

1.一般将数据库表格封装成对应的实体类,接收从数据库查询的数据,或者从表单接收的参数保存在实体类中,方便放入数据库

2.在程序处理过程中,用到的属性较多,并且将这些属性发送给jsp,封装成实体类简化操作

实体类 包含以下四部分:

1.属性与数据库列名对应

2.添加有参、无参构造方法

3.添加setter和getter方法

4.添加toString方法

本项目用到的实体类:

public class Student { private Integer id; private String name; private Integer age; private String address; private Double score; }

PageBean类 public class PageBean { private int pageNum; private int pageSize; private long totalCount; private int pageCount; private List data; }

注意:此处泛型类,能使其存放不同表格中的数据

4.4Dao层接口和实现类

Dao接口

接口中有三个功能,按照分页查找数据,获取数据库记录条数,添加数据 public interface StudentDao { List findByPage(int pageNum,int pageSize); long getCount(); void addStudent(Student stu); }

Dao实现类 public class StudentDaoImpl implements StudentDao { QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()); @Override public List findByPage(int pageNum, int pageSize) { String sql = "select * from student order by id limit ?,?;"; try { return qr.query(sql,new BeanListHandler(Student.class),(pageNum-1)*pageSize,pageSize); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("分页查询失败",e); } } @Override public long getCount() { String sql = "select count(*) from student;"; try { return qr.query(sql,new ScalarHandler<>()); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("查询数据总数失败",e); } } @Override public void addStudent(Student stu) { String sql = "insert into student(name,age,address,score) values(?,?,?,?);"; Object[] params = {stu.getName(),stu.getAge(),stu.getAddress(),stu.getScore()}; try { qr.update(sql,params); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("添加失败!",e); } } }

4.5Service层接口和实现类

Service接口,按照分页返回数据 public interface StudentService { PageBean findByPage(int pageNum, int pageSize); void addStu(Student stu); }

Service实现类 public class StudentServiceImpl implements StudentService { StudentDao studentDao = new StudentDaoImpl(); @Override public PageBean findByPage(int pageNum, int pageSize) { List pagedata = studentDao.findByPage(pageNum, pageSize); long pageCount = studentDao.getCount(); PageBean pageBean = new PageBean<>(pageNum,pageSize,pageCount,pagedata); return pageBean; } @Override public void addStu(Student stu) { studentDao.addStudent(stu); } }

4.6web层代码

1.获取浏览器传来的参数

2.判断参数是否符合规定,不符合则使用默认值,符合使用传来的值

3.创建业务层对象,获取分页实体类

4.将分页实体类放入域中,发送给页面 @WebServlet(name = "FindPageServlet",value = "/findpage") public class FindPageServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset-8"); //获取浏览器传来的参数 String pageNum = request.getParameter("pageNum"); String pageSize = request.getParameter("pageSize"); //获取页码 String jsppagenum = request.getParameter("pagenum"); int pn=1; int ps=5; //利用工具类判断是否为空 if(!IsEmptyUtils.isEmpty(pageNum)){ pn=Integer.parseInt(pageNum); if(pn<1){ pn=1; } } //利用工具类判断是否为空 if(!IsEmptyUtils.isEmpty(pageSize)){ ps=Integer.parseInt(pageSize); if(ps<1){ ps=5; } } if(!IsEmptyUtils.isEmpty(jsppagenum)){ pn=Integer.parseInt(jsppagenum); if(pn<1){ response.getWriter().write("

该页面不存在

"); } } //创建业务层对象 StudentService studentService = new StudentServiceImpl(); PageBean pageBean = studentService.findByPage(pn, ps); request.setAttribute("pageBean",pageBean); request.getRequestDispatcher("/listpage.jsp").forward(request,response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } }

4.7JSP代码

1.导入标签库

2.利用form表单将请求参数提交给服务器

3.获取服务器放在域中的数据,用EL表达式接收

4.实现首页,上一页,下一页,尾页,页码跳转,利用超链接再次向服务发送请求,并将参数放在请求地址的后边

分页学生列表

分页学生列表

学号姓名年龄地址成绩
${stu.id}${stu.name}${stu.age}${stu.address}${stu.score}

首页 上一页 下一页 尾页 页码:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值