java 分页调用多个分页接口的方法

合集下载

java分页教程

java分页教程

java分页教程
Java分页是一种常见的数据处理技术,用于将大量数据分成多个较小的页面,以便于用户浏览和处理。

在这篇教程中,我将向你介绍使用Java进行分页的基本概念和实现方法。

我将涵
盖以下主题:
1. 分页的基本原理:我将解释为什么需要分页以及它是如何工作的。

我还将讨论分页的优势和应用场景。

2. 使用Java进行分页的常见方法:我将介绍在Java中实现分
页功能的一些常见方法和技术。

我会讨论使用原生Java开发
和使用第三方库的两种方法。

3. 原生Java分页方法:我将演示如何使用Java的基本数据结
构和算法来分页数据。

我会讨论如何计算分页参数,并演示一个简单的实现示例。

4. 使用第三方库进行分页:我将介绍一些常用的Java分页库,例如Spring Data Paging和Apache Commons Pagination。

我将
演示如何使用这些库来快速实现分页功能。

5. 分页的性能考虑:我将讨论如何在设计分页功能时考虑性能问题。

我会介绍如何处理大数据集、优化查询和缓存结果等技巧。

6. 分页的用户界面设计:我将提供一些建议和最佳实践,以帮助你设计一个好看和易于使用的分页用户界面。

这个教程旨在帮助Java开发者了解和掌握分页的基本概念和实现。

不管你是一个经验丰富的开发者还是一个新手,我相信这个教程都能帮助你提高你的Java编程技能。

我希望这个教程对你有所帮助。

祝你使用Java进行分页的过程中顺利!。

java分页解决方法总结

java分页解决方法总结

java分页解决⽅法总结分页需要⽤到的俩个参数;pageNum(页码)、pageSize(每页的条数)有时候前端(移动端)传递的是start(从多少条记录开始)、count(获取的数量,也就是条数)后端⽅法需要的是;pageNum和pageSize⼀、将start、count转换为pageNum和pageSize(⼀)、定义PageCounter类@Getter@Setter@Builderpublic class PageCounter {// 当前页码private Integer pageNum;// 每页的条数private Integer pageSize;}(⼆)、将 start、count转换为pageNum、pageSiepublic class CommonUtil {// 将 start、count转换为pageNum、pageSiepublic static PageCounter converToPageParameter(Integer start, Integer count){int pageNum = start/count;PageCounter pageCounter = PageCounter.builder().pageNum(pageNum).pageSize(count).build();return pageCounter;}}⼆、分页的实现⽅法mybatis ⾥的pager 分页(⼀)、pom.xml安装pagehelper<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>4.1.0</version></dependency>(⼆)、例⼦/*** @Author: zhaobao1830* @Date: 2021/3/17 9:15* 返回分页数据*/public class PagedGridResult {/*** 当前页数*/private Integer pageNum;/*** 每页条数*/private Integer pageSize;/*** 总页数*/private Integer pages;/*** 总条数*/private long total;/*** 每⾏显⽰的内容*/private List<?> rows;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 int getPages() {return pages;}public void setPages(int pages) {this.pages = pages;}public long getTotal() {return total;}public void setTotal(long total) {this.total = total;}public List<?> getRows() {return rows;}public void setRows(List<?> rows) {this.rows = rows;}}serviece@Overridepublic PagedGridResult queryAll(int pageNum, int pageSize) {// 传⼊pageNum, pageSize参数PageHelper.startPage(pageNum, pageSize);// 获取userListList<User> userList = userMapper.queryAll();// 对userList进⾏处理,获取对应的volistList<UserVO> userVoList = assembleUserVoList(userList); return setterPagedGrid(pageNum, pageSize, userVoList);}public List<UserVO> assembleUserVoList(List<User> userList) { List<UserVO> userVoList = Lists.newArrayList();for (User user : userList) {UserVO userVO = assembleUserVo(user);userVoList.add(userVO);}return userVoList;}public UserVO assembleUserVo(User user) {UserVO userVo = new UserVO();userVo.setId(user.getId());userVo.setUsername(user.getUsername());userVo.setRole(user.getRole());userVo.setPhone(user.getPhone());userVo.setEmail(user.getEmail());return userVo;}/*** 封装分页⽅法* @param pageNum 当前页数* @param pageSize 每页条数* @param list 列表* @return {* pageNum: 1* pageSize: 6* pages: 1* rows: [{id: 1, username: "admin"}]* total: 6* }*/public PagedGridResult setterPagedGrid(Integer pageNum, Integer pageSize, List<?> list) {PageInfo<?> pageList = new PageInfo<>(list);PagedGridResult grid = new PagedGridResult();grid.setPageNum(pageNum);grid.setPageSize(pageSize);grid.setPages(pageList.getPages());grid.setTotal(pageList.getTotal());grid.setRows(list);return grid;}jpa⾥使⽤PageRequest简单版:@Overridepublic Page<Spu> getLatestPagingSpu(Integer pageNum, Integer pageSize) {Pageable page = PageRequest.of(pageNum, pageSize, Sort.by("createTime").descending());return spuRepository.findAll(page);}PageRequest.of()将对应的参数传递进去完整版:(⼀)、pom.xml安装dozermapper ⽤来对java bean进⾏拷贝⽤到的场景:从数据库查询回来的数据,前端不全⽤的上,需要进⾏⼆次封装(Vo),⾃⼰⼀个个属性赋值太浪费时间。

java-web分页操作实现(javaBean+Servlet+jsp)

java-web分页操作实现(javaBean+Servlet+jsp)

java-web分页操作实现(javaBean+Servlet+jsp)-web分页操作(jsp+servlet+javaBean)⼀分页操作分析分页在web项⽬中是⾮常重要的技术,打开每⼀个⽹页都可以看到分页1.疑问的出现在写分页前要了解什么是分页,分页⼀共有多少个⽅法、多少个参数,应该如何编写⽅法的实现和定义参数的变量2.疑问的解决分页⼀般分为⾸页、上⼀页、下⼀页、末页,还要得到总记录数,总页数,下⾯来详细介绍⼀下它们的概念如果设当前页为newPage(1)当前页 --------- 打开⽹页时看到的页⾯(2)⾸页 ----------- 第⼀页 newPage=1(3)上⼀页 --------- 当前页-1 newPage-1(4)下⼀页 --------- 当前页+1 newPage+1(5)末页 --------- 当前页==总页数 countPage=newPage(6)总记录数 -------- select count(*) from 表名(7)总页数 --------- 总记录数%每页显⽰的记录数=0 ? 总记录数/每页显⽰的记录数: 总记录数/每页显⽰的记录数+1(8)显⽰当前页的分析每页显⽰10条记录第1页:newpage=1 起始记录为0 10第2页:newpage=2 起始记录 10 10第3页:newpage=3 起始记录 20 10第4页:newpage=4 起始记录为30 10第5页:newpage=5 起始记录 40 10第6页:newpage=6 起始记录 50第n页 newpage=n (newpage-1)*pageSize(9)查询指定的页⾯第⼀页:Select id,name,address from test limit 0,10 注:从0开始查询,每页显⽰10条记录 第⼆页:Select id,name,address from test limit 20,10第三页:Select id,name,address from test limit 30,10 第n页:Select id,name,address from test limit (newpage-1)*pageSize,pagesize⼆功能的实现1.创建数据库(mysql)use echo;DROP TABLE IF EXISTS `test`;CREATE TABLE `test` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(50) NOT NULL,`address` varchar(50) NOT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=98DEFAULT CHARSET=gbk;INSERT INTO `test` VALUES(1,'⽩雪公主','宫殿'),(2,'⼩矮⼈','森林'),(3,'萝⼘','菜地'),(4,'⽩菜','菜地'),(5,'⼩猪','菜园'),(6,'⼟⾖','菜地'),(7,'⽜仔宝','⽜栏'),(8,'⽟⽶','菜地'),(9,'兔⼦','菜地'),(10,'⼑⾖','菜地'),(11,'青菜','菜地');2.创建功能模块Paging.jsppackage com.csdn.paging.domain;public class Paging {private Integer id;private String name;private String address;public Paging() {super();}public Paging(Integer id, String name, String address) {super();this.id = id; = name;this.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) { = name;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "Paging [id=" + id + ", name=" + name + ", address=" + address+ "]";}}PagingDao.javapackage com.csdn.paging.dao;import java.util.List;import com.csdn.paging.domain.Paging;public interface PagingDao {//显⽰总的记录条数Integer getCountRecord();//根据当前页到结束页的查询List<Paging> findIimitPage(Integer newPage);//总的页数Integer getCountPage();}PagingDaoImpl.javapackage com.csdn.paging.dao;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import com.csdn.paging.domain.Paging;public class PagingDaoImpl implements PagingDao {private static final Integer pageSize = 10;//每页显⽰5条数据private Integer countRecord;// 共有多少条记录private Integer countPage;// 共有多少页// private static final String URL = "jdbc:MySQL://localhost:3306/echo?user=root&password=123456&useUnicode=true&characterEncoding=utf-8";private static Connection conn;private PreparedStatement pstmt;private ResultSet rs;static {try {// 加载驱动Class.forName("com.mysql.jdbc.Driver");// 建⽴连接// conn = DriverManager.getConnection(URL);// 定义数据库地址url,并设置编码格式conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/echo?useUnicode=true&characterEncoding=utf-8&useSSL=false", "root", "123456"); } catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public Integer getCountRecord() {// 设置返回值Integer count = 0;// 获取连接// 定义sql语句查询出记录条数String sql = "select count(*) as con from test";try {// 创建预处理对象pstmt = conn.prepareStatement(sql);// 为占位符赋值// 执⾏更新语句rs = pstmt.executeQuery();// 判断if (rs.next()) {count = rs.getInt("con");}// 计算出总页数,并从getCountPage⽅法中获取this.countPage = ((count % pageSize) != 0 ? (count / pageSize + 1): (count / pageSize));// 释放资源if (rs != null) {rs.close();}if (pstmt != null) {pstmt.close();}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return count;}// 得到总的页数public Integer getCountPage() {// TODO Auto-generated method stubreturn countPage;}// 根据传过来的数值条件查询public List<Paging> findIimitPage(Integer newPage) {// 修改返回值List<Paging> entities = new ArrayList<Paging>();// 获取连接// 定义SQL语句String sql = "select id,name,address from test limit ?,?";//参数为(newPage - 1) * pageSize和pageSizetry {// 创建预处理对象pstmt = conn.prepareStatement(sql);// 为占位符赋值int index = 1;pstmt.setObject(index++, (newPage - 1) * pageSize);pstmt.setObject(index++, pageSize);// 执⾏更新rs = pstmt.executeQuery();// 判断while (rs.next()) {Paging entity = new Paging();entity.setId(rs.getInt("id"));entity.setName(rs.getString("name"));entity.setAddress(rs.getString("address"));entities.add(entity);}// 释放资源if (rs != null) {rs.close();}if (pstmt != null) {pstmt.close();}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return entities;}}PagingServlet.java注:dopost doget都是⽗类HttpServlet⾥的⽅法不要直接copy,先⽣成⽅法再copy代码。

Java实现分页功能常见的几种方法

Java实现分页功能常见的几种方法

Java实现分页功能常见的⼏种⽅法⼀、limit关键字service层@Service@Transactionalpublic class ImplStudentService implements StudentService {@Resourceprivate StudentDao studentDao;@Overridepublic List<Student> selectAllStudent(String province, Integer offset, Integer limit) {return studentDao.selectAll(province,offset,limit);}}sql语句select * from student where province = #{province} limit #{offset},#{limit}⼆、hibernate分页service层@Overridepublic List getStudents(Integer pageNo,Integer pageSize) throws Exception {// 分页数据int[] startIdAndCount = new int[2];startIdAndCount[0] = pageNo * pageSize;startIdAndCount[1] = pageSize;return studentDao.selectStudentsByPage(startIdAndCount);}dao层@Overridepublic List findByHqlPage(int[] startIdAndCount) throws Exception {String hql = "...";try {Query query = getSession().createQuery(hql);// 设置分页if (startIdAndCount != null && startIdAndCount.length > 0) {int rowStartIdx = Math.max(0, startIdAndCount[0]);if (rowStartIdx > 0) {query.setFirstResult(rowStartIdx);// 设置开始取值的索引}if (startIdAndCount.length > 1) {int rowCount = Math.max(0, startIdAndCount[1]);if (rowCount > 0) {query.setMaxResults(rowCount);// 设置结束取值的索引}}}return query.list();} catch (RuntimeException re) {log.error("分页查询失败!", re);throw re;}}三、截取List查询结果分页(简单粗暴)...List<StudentEnroll> students = studentlDao.getAllStudents();int count = 0;if(studentEnrolls != null && studentEnrolls.size() > 0) {count = studentEnrolls.size();int fromIndex = pageNo * pageSize;int toIndex = (pageNo + 1) * pageSize;if(toIndex > count) {toIndex = count;}List<StudentEnroll> pageList = studentEnrolls.subList(fromIndex, toIndex);...四、mybatis框架pageHelper插件分页Spring整合:导⼊pom.xml<!-- https:///artifact/com.github.pagehelper/pagehelper --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.2</version></dependency>配置项⽬配置⽂件(我在spring和mybatis整合的配置⽂件中配置的,如果在mybatis核⼼配置⽂件中配置,百度⼀下) <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 依赖数据源 --><property name="dataSource" ref="dataSource"/><!-- 注册加载myBatis映射⽂件 --><property name="mapperLocations"><array><value>classpath*:com/yyz/mapper/*Mapper.xml</value></array></property><!-- PageHelper分页配置 --><property name="plugins"><array><bean class="com.github.pagehelper.PageInterceptor"><property name="properties"><!--使⽤下⾯的⽅式配置参数,⼀⾏配置⼀个,后⾯会有所有的参数介绍 --><value><!--helperDialect属性来指定分页插件使⽤哪种⽅⾔。

Java实现分页功能

Java实现分页功能

Java实现分页功能driver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/test?allowMultiQueries=true&useUnicode=true&amp;characterEncoding=utf8 user=LFpassword=LFpackage cn.zr.testpage.entity;public class User {private String name;private int age;private String hobby;public String getName() {return name;}public void setName(String name) { = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getHobby() {return hobby;}public void setHobby(String hobby) {this.hobby = hobby;}public User() {}public User(String name, int age, String hobby) { = name;this.age = age;this.hobby = hobby;}@Overridepublic String toString() {return "User [name=" + name + ", age=" + age + ", hobby=" + hobby + "]";}}package cn.zr.testpage.service;import java.util.List;import er;import cn.zr.testpage.utils.Page;public interface UserService {/*** 获取总数量* @return返回总数*/int getAmount();/*** 获取当前页的数据* @param page* @return返回前页的数据*/List<User> getUserInfo(Page page);}package cn.zr.testpage.service.impl;import java.util.List;import erDao;import erDaoImpl;import er;import erService;import cn.zr.testpage.utils.Page;public class UserServiceImpl implements UserService {private UserDao userDao;// 通过代码块加载实现类{userDao = new UserDaoImpl();}@Overridepublic int getAmount() {return userDao.getAmount();}@Overridepublic List<User> getUserInfo(Page page) {return userDao.getUserInfo(page);}}package cn.zr.testpage.dao;import java.util.List;import er;import cn.zr.testpage.utils.Page;public interface UserDao {/*** 获取总数量* @return返回总数*/int getAmount();/*** 获取当前页的数据* @param page* @return返回前页的数据*/List<User> getUserInfo(Page page);}package cn.zr.testpage.dao.impl;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import erDao;import er;import cn.zr.testpage.utils.JdbcUtils;import cn.zr.testpage.utils.Page;import erBasicalImpl;public class UserDaoImpl extends UserBasicalImpl implements UserDao{ /*** 获取总数*/@Overridepublic int getAmount() {connection = JdbcUtils.getConnection();String sql = "SELECT COUNT(*) FROM USERINFO";int count = 0;try {pStatement = connection.prepareStatement(sql);rSet = pStatement.executeQuery();if(rSet.next()){count = rSet.getInt(1);}} catch (SQLException e) {e.printStackTrace();}finally{// 调⽤⽗类⽅法关闭资源super.close();}return count;}/*** 获取当前页的数据* @param page* @return返回前页的数据*/@Overridepublic List<User> getUserInfo(Page page) {connection = JdbcUtils.getConnection();//基于MySQL的函数的分页String sql = "SELECT 姓名,年龄,爱好 FROM USERINFO LIMIT ?,?";// 创建集合List<User> list = new ArrayList<User>();try {pStatement = connection.prepareStatement(sql);//设置相关参数pStatement.setInt(1, page.getStart());pStatement.setInt(2, page.getSize());rSet = pStatement.executeQuery();while(rSet.next()){User user = new User();user.setName(rSet.getString("姓名"));user.setAge(rSet.getInt("年龄"));user.setHobby(rSet.getString("爱好"));list.add(user);}} catch (SQLException e) {e.printStackTrace();}finally{// 调⽤⽗类⽅法关闭资源super.close();}return list;}}package cn.zr.testpage.servlet;import java.io.IOException;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import er;import erService;import erServiceImpl;import cn.zr.testpage.utils.BaseServlet;import cn.zr.testpage.utils.Page;public class ListServlet extends BaseServlet{private static final long serialVersionUID = 1L;@Overridepublic void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("...doGet...");// 获取当前页String curpage = req.getParameter("curpage");UserService userService = new UserServiceImpl();// 获取总数量int count = userService.getAmount();//字符串转成整型int currentpage = super.currentPage(curpage);// 创建page对象Page page = new Page(count, currentpage, pagesize);// 获取当前页的数据List<User> users = userService.getUserInfo(page);//将相关数据存储起来req.setAttribute("page", page);req.setAttribute("users", users);System.out.println(count);System.out.println(users);//转发req.getRequestDispatcher("/WEB-INF/jsp/list.jsp").forward(req, resp); }}package cn.zr.testpage.utils;import javax.servlet.http.HttpServlet;public class BaseServlet extends HttpServlet {public int pagesize = 2;public int currentPage(String cpage){int currentpage = cpage!=null && !"".equals(cpage) && isint(cpage)? currentpage=Integer.parseInt(cpage):1;return currentpage;}public boolean isint(String str){boolean bo = true;try {Integer.parseInt(str);} catch (Exception e) {bo = false;}return bo;}}package cn.zr.testpage.utils;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;/**** @author lf**/public class JdbcUtils {// 获取数据库连接public static Connection getConnection() {String url="jdbc:mysql://localhost:3306/test?allowMultiQueries=true&useUnicode=true&amp;characterEncoding=utf8"; String user="LF";String password ="LF";Connection connection = null;try {Class.forName("com.mysql.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackTrace();}try {connection = DriverManager.getConnection(url, user, password);} catch (SQLException e) {e.printStackTrace();}return connection;}}package cn.zr.testpage.utils;public class Page {// 页数(第⼏页)private int currentpage;// 查询数据库⾥⾯对应的数据有多少条private int total;// 从数据库查处的总记录数// 每页查询的数量条private int size;// 下页private int next;// 最后⼀页private int last;private int lpage;private int rpage;//从哪条开始查private int start;public Page() {super();}public int getCurrentpage() {return currentpage;}/****** @param currentpage* @param total* @param pagesize*/public void setCurrentpage(int currentpage,int total,int pagesize) {//如果整除表⽰正好分N页,如果不能整除在N页的基础上+1页int totalPages = total%pagesize==0? total/pagesize : (total/pagesize)+1;//总页数st = totalPages;//判断当前页是否越界,如果越界,我们就查最后⼀页if(currentpage>totalPages){this.currentpage = totalPages;}else{this.currentpage=currentpage;}if(currentpage<=0){this.currentpage=1;}//计算start 1----0 2 ------ 5this.start = (this.currentpage-1)*pagesize;}public int getTotal() {return total;}public void setTotal(int total) {this.total = total;}public int getSize() {return size;}public void setSize(int size) {this.size = size;}public int getNext() {return currentpage<last? currentpage+1: last;}//上⼀页public int getUpper() {return currentpage>1? currentpage-1: currentpage;}public int getLast() {return last;}//总共有多少页,即末页public void setLast(int last) {st = total%size==0? total/size : (total/size)+1;}public int getLpage() {return lpage;}public void setLpage(int lpage) {this.lpage = lpage;}public int getRpage() {return rpage;}public void setRpage(int rpage) {this.rpage = rpage;}/****** @param total 总记录数* @param currentpage 当前页* @param pagesize 每页显⽰多少条*/public Page(int total,int currentpage,int pagesize) {//总记录数this.total = total;//每页显⽰多少条this.size=pagesize;//计算当前页和数据库查询起始值以及总页数setCurrentpage(currentpage, total, pagesize);//分页计算int leftcount =5, //需要向上⼀页执⾏多少次rightcount =4;//起点页this.lpage =currentpage;//结束页this.rpage =currentpage;//2点判断this.lpage = currentpage-leftcount; //正常情况下的起点this.rpage = currentpage+rightcount; //正常情况下的终点//页差=总页数和结束页的差int topdiv = st-rpage; //判断是否⼤于最⼤页数/**** 起点页* 1、页差<0 起点页=起点页+页差值* 2、页差>=0 起点和终点判断*/this.lpage=topdiv<0? this.lpage+topdiv:this.lpage;/**** 结束页* 1、起点页<=0 结束页=|起点页|+1* 2、起点页>0 结束页*/this.rpage=this.lpage<=0? this.rpage+(this.lpage*-1)+1: this.rpage;/**** 当起点页<=0 让起点页为第⼀页* 否则不管*/this.lpage=this.lpage<=0? 1:this.lpage;/**** 如果结束页>总页数结束页=总页数* 否则不管*/this.rpage=this.rpage>last? st:this.rpage;}public int getStart() {return start;}}package cn.zr.testpage.utils;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;public class UserBasicalImpl {protected Connection connection;protected PreparedStatement pStatement;protected ResultSet rSet;public void close(){// 关闭资源try {if (rSet!=null) {rSet.close();}if (pStatement!=null) {pStatement.close();}if (connection!=null) {connection.close();}} catch (SQLException e) {e.printStackTrace();}}}<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@taglib prefix="c" uri="/jsp/jstl/core"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>⽤户信息</title></head><body><table><tr><th>姓名</th><th>年龄</th><th>爱好</th></tr><c:forEach items="${users }" var="user" varStatus="userindex"><tr><td>${ }</td><td>${user.age }</td><td>${user.hobby }</td></tr></c:forEach></table><div><a href="?curpage=1">⾸页</a><c:forEach begin="${page.lpage}" end="${page.rpage}" var="pageNum"><a href="?curpage=${pageNum }">${pageNum }</a></c:forEach><a href="?curpage=${st }">尾页</a></div></body></html>。

Java的分页方法

Java的分页方法

Java分页处理使用Pager-taglib标签库分页————使用作者:李江波QQ:5504704252010年8月10日一、介绍Web开发中分页是必须应用的技术,对查询结果不做分页处理几乎是不可思议的事情。

在Java Web技术中初学者一般会采用SQL语句分页技术,并在这个基础的之上编写分页组件,页面传参数控制层(Servlet或Action)调用分页组件的办法,往往会感觉非常麻烦。

其实在实际开发中我们可采用一些第三方的分页框架,可使分页变的相当简单——Pager-taglib 就是不错的选择。

Pager-taglib实际上是一个Jsp标签库,为在JSP上显示分页信息而设计的一套标签,通过这些标签的不同的组合支持多种风格的分页显示。

会形成多种不一样的分页页面,风格各异,她自带的DEMO就有七种左右的分页风格,包括Google的分页风格。

而需要订制自已的风格的分页页面也非常简单。

分页方式有两种:第一种是页面分页,适合查询结果不大情况第二种是数据库分页,适合大量查询二、准备Tomcat的2、2配置环境在下载包中找到pager-taglib.jar放到lib目录下(仅此足亦,完全没必要改web.xml什么的,还有官方war包中的东西都可以不要)三、方案一:页面分页页面分页实质是从Servlet或Action中调用业务方法一次性提取所有查询结果并保存,然后跳转页面在页面上通过对pager-taglib.标签库这个集合进行分页处理,因此适合查询数据不大的应用。

3.1控制层代码(这里使用Servelt)public void doGet(HttpServletRequest request,HttpServletResponse response)throwsServletException,IOException{ArrayList books=(ArrayList)request.getSession().getAttribute("books");if(books==null){BookService bookService=new BookServiceImpl();//调用业务层功能,获得所有图书列表(业务层的代码大家自己组织)ArrayList<Book>bookList=bookService.getAllBooks();request.getSession().setAttribute("books",bookList);}request.getRequestDispatcher("/list_books.jsp").forward(request,response);}3.2分页标签库的使用3.2.1导入标签库使用taglib指令导入标签库,如下所示://导入分页标签库<%@taglib uri="/tags/navigation/pager"prefix="pg"%>//导入JSTL标签库<%@taglib prefix="c"uri="/jsp/jstl/core"%>这样在页面中就可以使用分页标签了,uri属性值可打开tag-taglib.jar META-INF目录中taglib.tld文件中取得3.2.2页面分页处理在实现list_books.jsp页面分页之前,我们先简单了解一下page-taglib标签的基本结构:<pg:pager>--------------->是分页的根标签,主要进行分页信息的设置<pg:item></pg:item>-->表示一页中的一项,pager标签库可根据这个项的个数来计算分页参数的,通常放在循环中<pg:index>------->表示分页导航,该标签体内设置各种分页导航<pg:first></pg:first>————>分页导航,转向首页<pg:prev></pg:prev>————>分页导航,转向上一页<pg:pages></pg:pages>————>分页导航,转向指定的页面<pg:next></pg:next>----->分页导航,转向下一页<pg:last></pg:last>------>分页导航,转向最后一页</pg:index></pg:pager>使用以上标签就可以完成分页了,很简单吧!下面我们就结合list_book.jsp实例来看看这些标签的用法:(建议先做一下,再仔细体会后面代码的解析)[1]<pg:pager maxPageItems="3"url="list_book.jsp">[2]<table>[3]<c:forEach items="${sessionScope.books}"var="book">[4]<pg:item>[5]<tr>[6]<td>${book.bookName}</td>[7]</tr>[8]</pg:item>[9]</c:forEach>[10]<tr>[11]<td align="center">[12]<pg:index>[13]<pg:first><a href="${pageUrl}">第一页</a></pg:first>[14]<pg:prev><a href="${pageUrl}">上一页</a></pg:prev>[15]<pg:pages>[16]<a href="${pageUrl}">[${pageNumber}]</a>[17]</pg:pages>[18]<pg:next><a href="${pageUrl}">下一页</a></pg:next>[19]<pg:last><a href="${pageUrl}">最后一页</a></pg:last>[20]</pg:index>[21]</td>[22]</tr>[23]</table>[24]</pg:pager>代码说明:[1]:<pg:pager>主要进行分页信息的设置,属性比较多,这里用到如下两个常用属性maxPageItems:显示最多的纪录数/页,实现一页中出现item元素的数量控制url:分页的链接地址(表示当你单击分页导航所转向的页面),pager导航标签会在这个链接的基础上附加分页参数(offset)偏移量[3]:这里使用了JSTL标签迭代books集合,当books迭代完成或循环达到maxPageItems指定的次数则停止循环[4]:表示一页中的一项,maxPageItems=3决定item一页最多出现3次[13]:从当前页导航到第一页。

java 集合分页方法

java 集合分页方法

java 集合分页方法在Java中,可以使用集合(Collection)和分页技术来实现分页功能。

以下是一个简单的Java分页方法的示例:```javaimport ;import ;public class PaginationHelper<T> {private int pageSize;private int currentPage;private List<T> dataList;public PaginationHelper(int pageSize, int currentPage, List<T> dataList) {= pageSize;= currentPage;= dataList;}public List<T> getPageData() {int start = (currentPage - 1) pageSize;int end = start + pageSize;if (start < 0) {start = 0;}if (end > ()) {end = ();}if (start >= end) {return new ArrayList<>();} else {return (start, end);}}}```这个`PaginationHelper`类包含一个泛型类型`T`,表示要分页的数据类型。

构造函数接受三个参数:每页的大小、当前页码和数据列表。

`getPageData()`方法返回当前页的数据列表。

它首先计算起始和结束索引,然后使用`subList()`方法从数据列表中提取出当前页的数据。

如果起始索引小于0或大于数据列表的大小,则返回一个空列表。

使用示例:```javaList<String> dataList = new ArrayList<>();// 添加数据到dataList中...PaginationHelper<String> paginationHelper = new PaginationHelper<>(10, 1, dataList);List<String> pageData = ();```在这个示例中,我们创建了一个`PaginationHelper`对象,将每页大小设置为10,当前页码设置为1,并将数据列表传递给构造函数。

Java实现的分页工具类与用法示例

Java实现的分页工具类与用法示例

Java实现的分页⼯具类与⽤法⽰例本⽂实例讲述了Java实现的分页⼯具类与⽤法。

分享给⼤家供⼤家参考,具体如下:今天闲来没事,写了⼀个页⾯的分页⼯具类,具有很好的兼容性与实⽤性哦。

不管怎么样,先来瞧⼀瞧:package com.bw.utils;/*** 分页⼯具类** @author H.ros**/public class PageUtils2 {// 当前页(从页⾯获取的当前页码,未计算)private int currentPage;// 前⼀页private int prevPage;// 下⼀页private int nextPage;// 尾页private int lastPage;// 总记录数private int count;// 每页的条数private int pageSize = 3;// 分页计⼊数(使⽤时调⽤的初始页,计算后)private int pageRecord;// 页⾯分页模型(传⼊页⾯使⽤的DOM)private String page;// 有参构造器public PageUtils2(String currentPage, int count, int pageSize) {init(currentPage, count, pageSize);initLastPage();initCurrentPage();initPrevPage();initNextPage();initPageRecord();initPage();}// 初始化三个重要元素private void init(String currentPage, int count, int pageSize) {if (currentPage == null || currentPage == "" || currentPage == "0") {currentPage = "1";}this.currentPage = Integer.parseInt(currentPage);this.count = count;this.pageSize = pageSize;}// 初始化尾页private void initLastPage() {if (count % pageSize == 0) {lastPage = count / pageSize;} else {lastPage = count / pageSize + 1;}}// 初始化并矫正当前页(防⽌外部访问出错)private void initCurrentPage() {if (currentPage < 1) {currentPage = 1;} else if (currentPage > lastPage) {currentPage = lastPage;}}// 初始化上⼀页private void initPrevPage() {if (currentPage != 1) {prevPage = currentPage - 1;}else{prevPage = 1;}}// 初始化下⼀页private void initNextPage() {if (currentPage != lastPage) {nextPage = currentPage + 1;}else{nextPage = lastPage;}}// 初始化分页计⼊数private void initPageRecord() {pageRecord = (currentPage - 1) * pageSize;if(pageRecord < 0){pageRecord = 0;}}// 初始化页⾯分页模型(按键中的class属性是bootstrap的样式)private void initPage() {page = "第" + currentPage + "/" + lastPage + "页,共" + count + "条记录。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

java 分页调用多个分页接口的方法
在实际开发中,我们经常会遇到需要从多个接口获取数据并进行分页展示的情况。

例如,我们需要从接口A获取用户列表,从接口B 获取订单列表,然后将两个列表合并后进行分页展示。

下面,我们将介绍一种简单而高效的方法来实现这个需求。

我们需要定义一个通用的分页请求类,用于封装分页查询的参数,如当前页码、每页数量等。

例如,我们可以定义一个名为PageRequest的类:
```java
public class PageRequest {
private int page;
private int size;
// 省略getter和setter方法
}
```
接下来,我们可以定义一个通用的分页结果类,用于封装分页查询的结果,如数据列表、总记录数等。

例如,我们可以定义一个名为PageResult的类:
```java
public class PageResult<T> {
private List<T> data;
private int total;
// 省略getter和setter方法
}
```
接着,我们可以定义一个分页调用接口的通用方法,用于根据不同的分页请求参数调用不同的接口并返回分页结果。

例如,我们可以定义一个名为getPageData的方法:
```java
public PageResult<Object> getPageData(PageRequest pageRequest) {
// 根据分页请求参数调用接口A获取用户列表
List<Object> userList = apiA.getUserList(pageRequest.getPage(),
pageRequest.getSize());
// 根据分页请求参数调用接口B获取订单列表
List<Object> orderList = apiB.getOrderList(pageRequest.getPage(), pageRequest.getSize());
// 将两个列表合并
List<Object> mergedList = new ArrayList<>();
mergedList.addAll(userList);
mergedList.addAll(orderList);
// 对合并后的列表进行分页处理
List<Object> pageData = new ArrayList<>();
int startIndex = (pageRequest.getPage() - 1) * pageRequest.getSize();
int endIndex = Math.min(startIndex + pageRequest.getSize(), mergedList.size());
if (startIndex < endIndex) {
pageData = mergedList.subList(startIndex, endIndex);
}
// 构建分页结果对象
PageResult<Object> pageResult = new PageResult<>();
pageResult.setData(pageData);
pageResult.setT otal(mergedList.size());
return pageResult;
}
```
我们可以在业务逻辑中调用getPageData方法来获取分页数据。

例如,我们可以先创建一个PageRequest对象,然后将其传递给getPageData方法:
```java
PageRequest pageRequest = new PageRequest(); pageRequest.setPage(1);
pageRequest.setSize(10);
PageResult<Object> pageResult = getPageData(pageRequest);
// 获取分页数据和总记录数
List<Object> pageData = pageResult.getData();
int total = pageResult.getTotal();
// 进行分页展示
// ...
```
通过以上方法,我们可以轻松地实现分页调用多个分页接口的功能。

这种方法的优点是简单、高效,可以方便地应用于不同的场景。

同时,通过封装通用的分页请求类和分页结果类,可以使代码更加规范和易于维护。

本文介绍了一种以Java分页调用多个分页接口的方法。

通过定义通用的分页请求类和分页结果类,以及编写通用的分页调用接口方法,我们可以轻松地实现对多个接口的分页查询,并将结果合并后进行分页展示。

这种方法简单、高效,适用于各种需求场景,可以提高开发效率和代码质量。

相关文档
最新文档