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的分页原理详解⾸先先创建⼀个Student实体类。
import java.io.Serializable;import java.util.Map;public class Student implements Serializable {//实现序列化接⼝,⽤于对象的持久化private static final long serialVersionUID = -7476381137287496245L;//学⽣记录idprivate int id;//学⽣姓名private String stuName;//学⽣年龄private int age;//学⽣性别private int gender;//学⽣住址private String address;//空构造器public Student() {super();}/*** 构造器* @param id 学⽣记录id* @param stuName 学⽣姓名* @param age 学⽣年龄* @param gender 学⽣性别* @param address 学⽣住址*/public Student(int id, String stuName, int age, int gender, String address) {super();this.id = id;this.stuName = stuName;this.age = age;this.gender = gender;this.address = address;}/*** 该构造器⽤于将Map中的数据封装到Student类中,* 在构造器中传⼊Map参数。
* @param map*/public Student(Map<String, Object> map){this.id = (Integer)map.get("id");this.stuName = (String)map.get("stu_name");this.age = (Integer)map.get("age");this.gender = (Integer)map.get("gender");this.address = (String)map.get("address");}/** Getter Setter⽅法*/public int getId() {return id;}public void setId(int id) {this.id = id;}public String getStuName() {return stuName;}public void setStuName(String stuName) {this.stuName = stuName;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public int getGender() {return gender;}public void setGender(int gender) {this.gender = gender;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}/** 重写toString⽅法* @see ng.Object#toString()*/@Overridepublic String toString() {return "Student [id=" + id + ", stuName=" + stuName + ", age=" + age+ ", gender=" + gender + ", address=" + address + "]";}}创建Pager类import java.io.Serializable;import java.util.List;public class Pager<T> implements Serializable {//实现序列化接⼝⽤于对象持久化private static final long serialVersionUID = -8741766802354222579L;// 每页显⽰多少条记录private int pageSize;//当前第⼏页数据private int currentPage;// ⼀共多少条记录private int totalRecord;// ⼀共多少页记录private int totalPage;//要显⽰的数据private List<T> dataList;//构造函数public Pager(int pageNum, int pageSize, List<T> sourceList){//如果数据源为空跳出该构造⽅法if(sourceList == null || sourceList.isEmpty()){return;}// 总记录条数等于数据源的长度this.totalRecord = sourceList.size();// 每页显⽰多少条记录this.pageSize = pageSize;//获取最⼤页数所有记录除以每页显⽰的条数this.totalPage = this.totalRecord / this.pageSize;if(this.totalRecord % this.pageSize !=0){this.totalPage = this.totalPage + 1;}// 当前第⼏页数据如果参数pageNum超过最⼤页数this.currentPage = this.totalPage < pageNum ? this.totalPage : pageNum;// 起始索引int fromIndex = this.pageSize * (this.currentPage -1);// 结束索引int toIndex = this.pageSize * this.currentPage > this.totalRecord ? this.totalRecord : this.pageSize * this.currentPage;this.dataList = sourceList.subList(fromIndex, toIndex);}//空构造器public Pager(){}//构造器public Pager(int pageSize, int currentPage, int totalRecord, int totalPage,List<T> dataList) {super();this.pageSize = pageSize;this.currentPage = currentPage;this.totalRecord = totalRecord;this.totalPage = totalPage;this.dataList = dataList;}/** Getter 和 Setter ⽅法*/public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}public int getCurrentPage() {return currentPage;}public void setCurrentPage(int currentPage) {this.currentPage = currentPage;}public int getTotalRecord() {return totalRecord;}public void setTotalRecord(int totalRecord) {this.totalRecord = totalRecord;}public int getTotalPage() {return totalPage;}public void setTotalPage(int totalPage) {this.totalPage = totalPage;}public List<T> getDataList() {return dataList;}public void setDataList(List<T> dataList) {this.dataList = dataList;}}创建⼀个常量Constant类public class Constant {/*** 男性*/public static final int GENDER_MALE = 1;/*** ⼥性*/public static final int GENDER_FEMALE = 2;/*** 默认每页显⽰多少条记录*/public static final int DEFAULT_PAGE_SIZE = 5; /*** 默认显⽰第⼏页记录*/public static final int DEFAULT_PAGE_NUM = 1; /*** 默认学⽣性别*/public static final int DEFAULT_GENDER = 0;}创建StudentDAO类public interface StudentDao {/*** 根据查询条件,查询学⽣分页信息** @param searchModel* 封装查询条件* @param pageNum* 查询第⼏页数据* @param pageSize* 每页显⽰多少条记录* @return查询结果*/public Pager<Student> findStudent(Student searchModel, int pageNum,int pageSize);}创建⼀个JdbcUtil⼯具类public class JdbcUtil {// 表⽰定义数据库的⽤户名private static String USERNAME ;// 定义数据库的密码private static String PASSWORD;// 定义数据库的驱动信息private static String DRIVER;// 定义访问数据库的地址private static String URL;// 定义数据库的链接private Connection connection;// 定义sql语句的执⾏对象private PreparedStatement pstmt;// 定义查询返回的结果集合private ResultSet resultSet;static{//加载数据库配置信息,并给相关的属性赋值loadConfig();}/*** 加载数据库配置信息,并给相关的属性赋值* 从项⽬的jdbc.properties⽂件读取信息* 然后设置连接参数*/public static void loadConfig() {try {InputStream inStream = JdbcUtil.class.getResourceAsStream("/jdbc.properties");Properties prop = new Properties();prop.load(inStream);USERNAME = prop.getProperty("ername");PASSWORD = prop.getProperty("jdbc.password");DRIVER= prop.getProperty("jdbc.driver");URL = prop.getProperty("jdbc.url");} catch (Exception e) {throw new RuntimeException("读取数据库配置⽂件异常!", e);}}public JdbcUtil() {}/*** 获取数据库连接** @return数据库连接*/public Connection getConnection() {try {Class.forName(DRIVER); // 注册驱动connection = DriverManager.getConnection(URL, USERNAME, PASSWORD); // 获取连接 } catch (Exception e) {throw new RuntimeException("get connection error!", e);}return connection;/*** 执⾏更新操作** @param sql* sql语句* @param params* 执⾏参数* @return执⾏结果* @throws SQLException*/public boolean updateByPreparedStatement(String sql, List<?> params) throws SQLException {boolean flag = false;int result = -1;// 表⽰当⽤户执⾏添加删除和修改的时候所影响数据库的⾏数 pstmt = connection.prepareStatement(sql);int index = 1;// 填充sql语句中的占位符依次填⼊预处理语句所需的参数if (params != null && !params.isEmpty()) {for (int i = 0; i < params.size(); i++) {pstmt.setObject(index++, params.get(i));}}result = pstmt.executeUpdate();flag = result > 0 ? true : false;return flag;}/*** 执⾏查询操作** @param sql* sql语句* @param params* 执⾏参数* @return* @throws SQLException*/public List<Map<String, Object>> findResult(String sql, List<?> params) throws SQLException {//创建泛型为Map类型的ListList<Map<String, Object>> list = new ArrayList<Map<String, Object>>();//预处理语句参数索引int index = 1;pstmt = connection.prepareStatement(sql);//依次填⼊参数if (params != null && !params.isEmpty()) {for (int i = 0; i < params.size(); i++) {pstmt.setObject(index++, params.get(i));}}//执⾏预处理语句获得结果集resultSet = pstmt.executeQuery();//获取源数据ResultSetMetaData metaData = resultSet.getMetaData();//获取源数据的条数int cols_len = metaData.getColumnCount();//遍历resultSet将数据放⼊map中再将map放⼊list中while (resultSet.next()) {Map<String, Object> map = new HashMap<String, Object>();for (int i = 0; i < cols_len; i++) {String cols_name = metaData.getColumnName(i + 1);Object cols_value = resultSet.getObject(cols_name);if (cols_value == null) {cols_value = "";}map.put(cols_name, cols_value);}list.add(map);}return list;}/*** 释放资源*/public void releaseConn() {if (resultSet != null) {try {resultSet.close();} catch (SQLException e) {e.printStackTrace();}if (pstmt != null) {try {pstmt.close();} catch (SQLException e) {e.printStackTrace();}}if (connection != null) {try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}}创建JdbcSqlStudentDaoImpl类/*** 使⽤mysql数据库limit关键字实现分页****/public class JdbcSqlStudentDaoImpl implements StudentDao {//实现查询的⽅法@Overridepublic Pager<Student> findStudent(Student searchModel, int pageNum,int pageSize) {//存放获取的数据Pager<Student> result = null;// 存放查询参数List<Object> paramList = new ArrayList<Object>();//获取查询参数NameString stuName = searchModel.getStuName();//获取查询参数genderint gender = searchModel.getGender();//创建查询语句StringBuilder sql = new StringBuilder("select * from t_student where 1=1");//得到所有的记录条数StringBuilder countSql = new StringBuilder("select count(id) as totalRecord from t_student where 1=1 ");//如果stuName存在且不为空的话在两条sql语句后⾯加上查询条件if (stuName != null && !stuName.equals("")) {sql.append(" and stu_name like ?");countSql.append(" and stu_name like ?");//查询条件放⼊查询参数集合中paramList.add("%" + stuName + "%");}//如果gender的值等于两个常量中的其中⼀个时if (gender == Constant.GENDER_FEMALE || gender == Constant.GENDER_MALE) {sql.append(" and gender = ?");countSql.append(" and gender = ?");paramList.add(gender);}// 起始索引int fromIndex = pageSize * (pageNum -1);// 使⽤limit关键字,实现分页sql.append(" limit " + fromIndex + ", " + pageSize );// 存放所有查询出的学⽣对象List<Student> studentList = new ArrayList<Student>();//创建JDBC⼯具类JdbcUtil jdbcUtil = null;try {jdbcUtil = new JdbcUtil();// 获取数据库链接jdbcUtil.getConnection();// 获取总记录数List<Map<String, Object>> countResult = jdbcUtil.findResult(countSql.toString(), paramList);//获取List中的第⼀个MapMap<String, Object> countMap = countResult.get(0);//获取Map中的键值为totalRecord的值int totalRecord = ((Number)countMap.get("totalRecord")).intValue();// 获取查询的学⽣记录List<Map<String, Object>> studentResult = jdbcUtil.findResult(sql.toString(), paramList);//将Map中的数据遍历出来封装成student类再放⼊studentlist中去if (studentResult != null) {for (Map<String, Object> map : studentResult) {Student s = new Student(map);studentList.add(s);}}//获取总页数int totalPage = totalRecord / pageSize;if(totalRecord % pageSize !=0){totalPage++;}// 组装pager对象result = new Pager<Student>(pageSize, pageNum,totalRecord, totalPage, studentList);} catch (SQLException e) {throw new RuntimeException("查询所有数据异常!", e);} finally {if (jdbcUtil != null) {jdbcUtil.releaseConn(); // ⼀定要释放资源}}return result;}}创建service类public interface StudentService {/*** 根据查询条件,查询学⽣分页信息** @param searchModel* 封装查询条件* @param pageNum* 查询第⼏页数据* @param pageSize* 每页显⽰多少条记录* @return查询结果*/public Pager<Student> findStudent(Student searchModel, int pageNum,int pageSize);}创建Servlet类public class JdbcSqlServlet extends HttpServlet {private static final long serialVersionUID = -318134993070614515L;private StudentService studentService = new JdbcSqlStudentServiceImpl();public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 接收request⾥的参数String stuName = request.getParameter("stuName"); //学⽣姓名// 获取学⽣性别//如果没有获取到就赋值为默认数值int gender = Constant.DEFAULT_GENDER;String genderStr = request.getParameter("gender");//如果符合条件就转化为Int类型if(genderStr!=null && !"".equals(genderStr.trim())){gender = Integer.parseInt(genderStr);}// 校验pageNum参数输⼊合法性String pageNumStr = request.getParameter("pageNum");//如果页码数不是数字的话if(pageNumStr !=null && !StringUtil.isNum(pageNumStr)){request.setAttribute("errorMsg", "参数传输错误");request.getRequestDispatcher("jdbcSqlStudent.jsp").forward(request, response);return;}//显⽰第⼏页数据int pageNum = Constant.DEFAULT_PAGE_NUM;//获取页码数if(pageNumStr!=null && !"".equals(pageNumStr.trim())){pageNum = Integer.parseInt(pageNumStr);}int pageSize = Constant.DEFAULT_PAGE_SIZE; // 每页显⽰多少条记录String pageSizeStr = request.getParameter("pageSize");if(pageSizeStr!=null && !"".equals(pageSizeStr.trim())){pageSize = Integer.parseInt(pageSizeStr);}// 组装查询条件Student searchModel = new Student();searchModel.setStuName(stuName);searchModel.setGender(gender);//调⽤service 获取查询结果Pager<Student> result = studentService.findStudent(searchModel,pageNum, pageSize);// 返回结果到页⾯request.setAttribute("result", result);request.setAttribute("stuName", stuName);request.setAttribute("gender", gender);request.getRequestDispatcher("jdbcSqlStudent.jsp").forward(request, response); }}加上⼀个正则⼯具类⽤于判断输⼊的参数是否为数字public class StringUtil {/*** 校验字符串是否是⼤于0的数字* @param string* @return*/public static boolean isNum(String string){Pattern pattern = pile("[1-9]{1}\\d*");Matcher matcher = pattern.matcher(string);return matcher.matches();}}。
请求分页式存储管理课程设计java
请求分页式存储管理课程设计java在Java中实现分页式存储管理,可以设计一个简单的模拟系统,如下面的概念框架。
假设我们有一组固定大小的页和一组固定大小的内存帧。
分页算法的任务是当请求来时,找到一个空闲的内存帧并分配给请求的页。
下面是一个简单的课程设计方案:定义页面和帧的概念:使用类来表示页和帧。
class Page {// ...}class Frame {// ...}创建页表和帧池:使用集合来表示页表和帧池Map<Page, Frame> pageTable = new HashMap<>();List<Frame> framePool = new ArrayList<>();实现分页算法:当请求到来时,找到一个空闲的帧并分配给请求的页。
如果没有空闲的帧,那么就需要使用某种页面替换算法(如最少使用算法或最近最久未使用算法)来选择一个帧进行替换。
public Frame allocateFrame(Page page) {// ...}处理页错误:如果请求的页不在内存中,那么就会产生页错误。
在这种情况下,需要将页面从磁盘加载到内存中。
public void handlePageFault(Page page) {// ...}这只是一个非常基础的框架,你可能需要添加更多的功能,比如模拟从磁盘读取页面的延迟,或者记录并显示内存的使用情况等。
记住,这个项目是一个模拟的分页存储管理系统,所以实际的实现细节可能会有所不同。
在实际的操作系统中,分页存储管理涉及到很多复杂的问题,比如虚拟内存管理、页面替换算法、页表管理等。
java详细设计说明书文档示例
java详细设计说明书文档示例Java详细设计说明书文档示例一、引言Java详细设计说明书是软件开发中的重要文档之一,它在软件设计和开发过程中起到了指导和记录的作用。
本文档旨在详细描述Java 程序的设计思路、模块结构、类设计和方法实现等内容,为开发人员提供清晰明了的设计指导。
二、背景Java是一种跨平台的面向对象编程语言,具有简单易学、安全可靠和高效性的特点。
在软件开发领域,Java被广泛应用于Web应用、移动应用和企业级应用等多个领域。
为了确保Java程序的设计合理、结构清晰和代码可维护性,编写Java详细设计说明书是非常必要的。
三、设计目标本文档的设计目标如下:1. 描述Java程序的整体架构和模块划分,使开发人员能清晰理解程序结构。
2. 详细描述各个模块的功能和相互关系,确保程序的模块化和低耦合性。
3. 说明每个类的设计思路和功能,确保类的职责单一和高内聚性。
4. 提供方法级的设计说明,确保方法的输入输出和实现逻辑清晰明了。
5. 给出必要的代码示例和注释,方便开发人员理解和使用。
四、设计概述本Java程序是一个学生信息管理系统,主要包括学生信息的录入、查询、修改和删除等功能。
系统的整体架构采用三层架构(表现层、业务逻辑层和数据访问层),以实现功能模块的分离和重用。
1. 表现层表现层是用户与系统交互的界面,负责接收用户输入和显示系统输出。
在本程序中,我们使用Swing框架开发了一个简单的图形用户界面(GUI),包括菜单、输入框和按钮等组件。
2. 业务逻辑层业务逻辑层是程序的核心部分,负责处理用户请求和业务逻辑。
在本程序中,我们设计了以下几个业务模块:- 学生信息录入模块:负责接收用户输入的学生信息,对其进行验证和保存。
- 学生信息查询模块:负责根据用户提供的条件查询学生信息,并将结果返回给用户。
- 学生信息修改模块:负责根据用户提供的条件修改学生信息。
- 学生信息删除模块:负责根据用户提供的条件删除学生信息。
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,并将数据列表传递给构造函数。
JavaWeb实现分页的四种方法
JavaWeb实现分页的四种⽅法⼀.借助数组进⾏分页原理:进⾏数据库查询操作时,获取到数据库中所有满⾜条件的记录,保存在应⽤的临时数组中,再通过List的subList⽅法,获取到满⾜条件的所有记录。
实现:⾸先在dao层,创建StudentMapper接⼝,⽤于对数据库的操作。
在接⼝中定义通过数组分页的查询⽅法,如下所⽰:1 List<Student> queryStudentsByArray();⽅法很简单,就是获取所有的数据,通过list接收后进⾏分页操作。
创建StudentMapper.xml⽂件,编写查询的sql语句:1 <select id="queryStudentsByArray" resultMap="studentmapper">2 select * from student3 </select>可以看出再编写sql语句的时候,我们并没有作任何分页的相关操作。
这⾥是查询到所有的学⽣信息。
接下来在service层获取数据并且进⾏分页实现:定义IStuService接⼝,并且定义分页⽅法: List<Student> queryStudentsByArray(int currPage, int pageSize);通过接收currPage参数表⽰显⽰第⼏页的数据,pageSize表⽰每页显⽰的数据条数。
创建IStuService接⼝实现类StuServiceIml对⽅法进⾏实现,对获取到的数组通过currPage和pageSize进⾏分页:1@Override2public List<Student> queryStudentsByArray(int currPage, int pageSize) {3 List<Student> students = studentMapper.queryStudentsByArray();4// 从第⼏条数据开始5int firstIndex = (currPage - 1) * pageSize;6// 到第⼏条数据结束7int lastIndex = currPage * pageSize;8return students.subList(firstIndex, lastIndex);9 }通过subList⽅法,获取到两个索引间的所有数据。
分页详细说明
1、DAO层接口设计,在PersonDao接口中定义如下方法:public interface PersonDao {//省略了其他的代码public PageList findAllByPage(PageList page,String name);}2、在DAO层实现类PersonDaoImpl对上面的方法实现如下:@Servicepublic class PersonDaoImpl extends PagingHibernateDaoSupport implements PersonDao {//省略了其他的代码@Overridepublic PageList findAllByPage(PageList page,String name) {Long totalCount = findAllRecord("select count(*) from Person where name like '%"+name+"%'");page.setTotalCount(totalCount.intValue());page.setList(findByPage("from Person where name like '%"+name+"%'", page.getOffSet(), PageList.PAGESIZE));return page;}}3、在PagingHibernateDaoSupport中对findAllRecord方法和findByPage方法的实现:public class PagingHibernateDaoSupport extends HibernateDaoSupport { public Long findAllRecord(final String sql){return (Long)getHibernateTemplate().execute(new HibernateCallback() { public Long doInHibernate(Session session) throws HibernateException,SQLException {Query query=session.createQuery(sql);return (Long)query.uniqueResult();}});}public List findByPage(final String hql, final int offset, final int pageSize) {List list = getHibernateTemplate().executeFind(new HibernateCallback(){public Object doInHibernate(Session session)throws HibernateException, SQLException{List result = session.createQuery(hql).setFirstResult(offset).list();return result;}});return list;}4、建立一个保存分页信息的类PageList,具体的代码如下:public class PageList {public static int PAGESIZE = CommonConstant.PAGESIZE; //每页显示记录数private int personalSize=0; //每页显示记录数private int totalCount; //记录总数private int totalPage; //总页数private int currPage = 1; //当前页数private int offSet = 0; //从第几条记录开始private QueryDTO audto = new QueryDTO();private List<?> list; //要返回的某一页的记录列表public PageList(int pageSize){this.personalSize = pageSize;}/*** 创建 PageList 实例。
java分页写法
在Java中,分页是在处理大量数据时一种常见的需求。
通常,我们使用一些参数,比如页数和每页条目数,来实现分页。
以下是一个简单的Java分页写法的示例,使用了一个名为Pagination的辅助类:import java.util.List;public class Pagination<T> {private List<T> items;private int pageSize;private int currentPage;public Pagination(List<T> items, int pageSize) {this.items = items;this.pageSize = pageSize;this.currentPage = 1; // 默认为第一页}public List<T> getCurrentPageItems() {int startIndex = (currentPage - 1) * pageSize;int endIndex = Math.min(startIndex + pageSize, items.size());return items.subList(startIndex, endIndex);}public int getTotalPages() {return (int) Math.ceil((double) items.size() / pageSize);}public void nextPage() {if (currentPage < getTotalPages()) {currentPage++;}}public void previousPage() {if (currentPage > 1) {currentPage--;}}// Getters and setters for other attributes as neededpublic static void main(String[] args) {// 示例用法List<String> dataList = List.of("Item1", "Item2", "Item3", "Item4", "Item5", "Item6", "Item7", "Item8");// 设置每页显示的条目数int pageSize = 3;Pagination<String> pagination = new Pagination<>(dataList, pageSize);// 获取并打印第一页的数据System.out.println("Page 1: " + pagination.getCurrentPageItems());// 翻到下一页pagination.nextPage();// 获取并打印第二页的数据System.out.println("Page 2: " + pagination.getCurrentPageItems());// 可以根据需要进行其他操作,比如跳转到指定页等}}这个例子中,Pagination类包含了一些基本的分页功能,包括获取当前页的数据、获取总页数、翻到下一页、翻到上一页等。
java一个通用的分页方法
一个通用的分页方法,不仅在数据库操作上分页了还在上层也做了分页.理解了这个就很容易理解其他框架的分页了.java 代码import java.math. * ;public class Pager {private int totalRows; // 总行数private int pageSize=30 ; // 每页显示的行数private int currentPage; // 当前页号private int totalPages; // 总页数private int startRow; // 当前页在数据库中的起始行public Pager() {}public Pager( int _totalRows) {totalRows=_totalRows;totalPages=totalRows / pageSize;int mod=totalRows % pageSize;if (mod > 0 ) {totalPages ++ ;}currentPage=1 ;startRow=0 ;}public int getStartRow() {return startRow;}public int getTotalPages() {return totalPages;}public int getCurrentPage() {return currentPage;}public int getPageSize() {return pageSize;}public void setTotalRows( int totalRows) {this.totalRows = totalRows;}public void setStartRow( int startRow) {this.startRow = startRow;}public void setTotalPages( int totalPages) { this.totalPages = totalPages;}public void setCurrentPage( int currentPage) { this.currentPage = currentPage;}public void setPageSize( int pageSize) {this.pageSize = pageSize;}public int getTotalRows() {return totalRows;}public void first() {currentPage = 1 ;startRow = 0 ;}public void previous() {if (currentPage == 1 ) {return ;}currentPage -- ;startRow =(currentPage-1)*pageSize;}public void next() {if (currentPage<totalPages) {currentPage ++ ;}startRow=(currentPage-1)*pageSize;}public void last() {currentPage=totalPages;startRow=(currentPage-1 )*pageSize;}public void refresh(int _currentPage) {currentPage=_currentPage;if (currentPage>totalPages) {last();}}}操作pager的PagerServicejava 代码package mon;public class PagerService {public Pager getPager(String currentPage,String pagerMethod, int totalRows) {// 定义pager对象,用于传到页面Pager pager= new Pager(totalRows);// 如果当前页号为空,表示为首次查询该页// 如果不为空,则刷新pager对象,输入当前页号等信息if (currentPage!=null ) {pager.refresh(Integer.parseInt(currentPage));}// 获取当前执行的方法,首页,前一页,后一页,尾页。
java list 分页通用方法
java list 分页通用方法标题: Java list 分页通用方法(创建与此标题相符的正文并拓展)正文:Java list 分页是一种常用的数据访问技术,它允许用户以特定的速度从列表中检索数据。
使用分页技术,用户可以在一个固定的页数内快速访问列表中的特定元素,而不必一次性检索整个列表。
本文将介绍 Javalist 中实现分页的通用方法,以便开发人员可以轻松地将其集成到自己的应用程序中。
步骤1. 创建一个 Javalist 对象使用以下代码创建一个 Javalist 对象,并将其分配给一个变量:```Javalist<Integer> list = new ArrayList<Integer>();```2. 设置起始页码和结束页码使用以下代码设置起始页码和结束页码:```int start = 1; // 起始页码int end = list.size() - 1; // 结束页码```3. 设置分页算法使用以下代码设置分页算法:```int pageNumber = (int) (Math.random() * (end - start + 1));```该代码将生成一个随机整数,该整数将作为分页器的页码。
4. 获取当前页码使用以下代码获取当前页码:```int currentPageNumber = (int) (Math.random() * (list.size() - start + 1));```5. 获取指定元素的下一页使用以下代码获取指定元素的下一页:```int nextPage = (int) (Math.random() * (list.size() - (start + 1) + 1));int index = list.indexOf(currentPageNumber);if (index < 0) {index = list.size();}list.set(index + nextPage, currentPageNumber);```该代码使用随机数生成器生成下一页的页码,然后将其与当前页码进行比较,如果当前页码不正确,则使用下一页的页码作为初始索引。
JAVA分页-珍贵简单
*/
public Pagination(int maxResults, int maxResultsInPage, int currentPage) {
/*
* 记录总数: 总是大于或等于 0 的值.
if (currentPage < FIRST_PAGE) {
current_page = FIRST_PAGE;
} else if (currentPage > this.maxPage){
current_page = this.maxPage;
}
this.currentPage = current_page;
}
/**
* 构造函数
* @param currentPage 当前页数
* @param maxResultsInPage 每页记录数
*/
public PageCreator(int currentPage, int maxResultsInPage) {
/**
* 分页对象生成器
* 包括两个构造器、两个工厂方法、两个分页对象创建方法。
* 这是一个尝试。
* @author chine
*
*/
public class PageCreator implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
*/
public final Pagination createPagination(int maxResults) {
Java代码实现真分页
Java 代码实现真分页在JavaWeb项⽬中,分页是⼀个⾮常常见且重要的⼀个⼩⽅⾯。
本次作为记载和学习,记录项⽬中出现的分页并做好学习记录。
在这⾥,⽤的是SSH框架。
框架可以理解如下图:在JSP页⾯,描写的代码如下:Action部分代码:1 <div align ="center">2 <c:if test ="${page.currentPage>1}">3 <a href ="show_findStessayAll.action?currentPage=1" >⾸页</a >4 <a href ="show_findStessayAll.action?currentPage=${page.currentPage-1 }">上⼀页</a >5 </c:if >6 <c:if test ="${page.currentPage != page.totalPage }">7 <a href ="show_findStessayAll.action?currentPage=${page.currentPage+1 }">下⼀页</a >8 <a href ="show_findStessayAll.action?currentPage=${page.totalPage}">末页</a >9 </c:if >1011 <form action ="show_findStessayAll.action">12 共${page.totalPage}页13 <input type ="text" value ="${page.currentPage}" name ="currentPage" size ="1">页14 <input type ="submit" value ="go">15 </form >16</div >1 public String findAcadcommAll(){2 //page 存储页⾯数据3 Page<Acadcomm> page = new Page<Acadcomm>();45 //总记录数6 int totalRecord = showService.findAcadcommRecord();7 if (totalRecord!=0){8 page.setTotalRecord(totalRecord);9 //总页数10 int totalPage = ( totalRecord % page.getPageSize() == 0) ? totalRecord / page.getPageSize():totalRecord / page.getPageSize()+1; 11 page.setTotalPage(totalPage);12 //当前页13 int currentPage = 1;14 String currentPageString = req.getParameter("currentPage");15 System.out.println("currentPageString:"+currentPageString);16 if (currentPageString != null ){17 currentPage = Integer.parseInt(currentPageString);18 }19 page.setCurrentPage(currentPage);20 System.out.println("currentPage:"+currentPage);2122 String hql = "from Acadcomm a"; // 查询语句23//要显⽰的数据24if(totalRecord % page.getPageSize()!=0 && currentPage==totalPage ){25 page.setDataList(showService.queryForPage(acadcomm,hql, (currentPage-1)*page.getPageSize(), totalRecord % page.getPageSize())); 2627 }else {28 page.setDataList(showService.queryForPage(acadcomm,hql, (currentPage-1)*page.getPageSize(),page.getPageSize()));29 }30 }31 req.setAttribute("page", page);3233return "findAcadcommAllSuccess";34 }调⽤Servicepublic int findStessayRecord(String hql);//返回总记录数public List<Stessay> queryForPage(Stessay stessay, String hql, int offset,int length);//返回当前页⾯数据ServiceImpl调⽤对应Dao⾥⾯的函数1@Override2public int findStessayRecord(String hql) {3// TODO Auto-generated method stub45return stessayDao.getAllRowCount(hql); // 总记录数6 }7 @Override8public List<Stessay> queryForPage(Stessay stessay, String hql, int offset,9int length) {10// TODO Auto-generated method stub11return stessayDao.queryForPage(hql, offset, length);12 }Dao接⼝只有⽅法,不写具体实现:1public List<Stessay> findAll();2public int getAllRowCount(String hql);3public List<Stessay> queryForPage(final String hql, final int offset, final int length) ;具体⽅法的实现交给DaoImpl:1/**2 * 查询所有的记录数3 * @param hql 查询条件4 * @return总记录数5*/6 @Override7public int getAllRowCount(String hql) {8return this.getHibernateTemplate().find(hql).size();9 }10/**11 * 分页查询12 * @param hql 查询条件13 * @param offset 开始记录14 * @param length ⼀次查询⼏条记录15 * @return查询的记录集合16*/17 @Override18public List<Stessay> queryForPage(final String hql, final int offset, final int length) {19 Session session = this.getSession();20 Query q = session.createQuery(hql);21 q.setFirstResult(offset);22 q.setMaxResults(length);23 List<Stessay> list = q.list();2425 System.out.println("--------PaperImpl---------------size() "+list.size());26 session.close();27return list;28 }真分页就是页⾯显⽰多少,就从数据库⾥加载多少出来,这样⼀来就会提⾼效率。
Javalist分页(多种方式)
Javalist分页(多种⽅式)⽅式⼀:public static void fenye(List list,int pagesize){int totalcount=list.size();int pagecount=0;int m=totalcount%pagesize;if (m>0){pagecount=totalcount/pagesize+1;}else{pagecount=totalcount/pagesize;}for(int i=1;i<=pagecount;i++){if (m==0){List<Integer> subList= list.subList((i-1)*pagesize,pagesize*(i));System.out.println(subList);}else{if (i==pagecount){List<Integer> subList= list.subList((i-1)*pagesize,totalcount);System.out.println(subList);}else{List<Integer> subList= list.subList((i-1)*pagesize,pagesize*(i));System.out.println(subList);}}}}List<Integer> list=new ArrayList<Integer>();for(int i=1;i<52;i++){list.add(i);}fenye(list,10);⽅式⼆:public <T> List<List<T>> splitList(List<T> list, int pageSize){int listSize = list.size();int page = (listSize + (pageSize - 1)) / pageSize;List<List<T>> listArray = new ArrayList<List<T>>();for (int i = 0; i < page; i++){List<T> subList = new ArrayList<T>();for (int j = 0; j < listSize; j++){int pageIndex = ((j + 1) + (pageSize - 1)) / pageSize;if (pageIndex == (i + 1)){subList.add(list.get(j));}if ((j + 1) == ((j + 1) * pageSize)){break;}}listArray.add(subList);}return listArray;}⽅式三:public SearchResult paging(List<T> list, int pageNumber, int pageSize) throws Exception{List<T> pageList = new ArrayList<T>();int currIdx = (pageNumber > 1 ? (pageNumber -1) * pageSize : 0);for (int i = 0; i < pageSize && i < list.size() - currIdx; i++){T listNew = list.get(currIdx + i);pageList.add(listNew);}SearchResult<T> searchResult = new SearchResult<T>();searchResult.setList(pageList);searchResult.setTotal(list.size());if (searchResult.getTotal()%pageSize == 0){searchResult.setPages((int)searchResult.getTotal()/pageSize);}else {searchResult.setPages((int)searchResult.getTotal()/pageSize + 1); }searchResult.setPageNum(pageNumber);searchResult.setPageSize(pageSize);searchResult.setSize(pageList.size());//是否是第⼀页if (pageNumber == 1){searchResult.setIsFirstPage(true);}else {searchResult.setIsFirstPage(false);}//是否是最后⼀页if ((searchResult.getTotal() - pageNumber*pageSize) > 0){searchResult.setIsLastPage(false);}else {searchResult.setIsLastPage(true);}return searchResult;}⽅式四:List<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);list.add(4);list.add(5);int page = 2;//相当于pageNoint count = 20;//相当于pageSizeint size = list.size();int pageCount=size/count;int fromIndex = count * (page - 1);int toIndex = fromIndex + count;if (toIndex >= size) {toIndex = size;}if(page>pageCount+1){fromIndex=0;toIndex=0;}System.out.println(list.subList(fromIndex, toIndex));。
Java分页
Java分页1、分页原理分页必须两参数:页码即当前页为第⼏页(pageNo)、每页显⽰的记录数(pageSize)开始和结束位置:通过分页参数计算开始位置和结束位置,从⽽从列表中获取分页的数据。
开始和结束公式:Integer start = pageSize * (pageNo - 1); Integer end = pageSize * pageNo2、List分页截取/*** @Description List分页,获取每页数据* @param* @return*/public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("1");list.add("2");list.add("3");list.add("4");list.add("5");//每页显⽰多⼩数据Integer pageSize = 2;//总页数Integer totalPage = list.size() / pageSize;//余数计算Integer mod = list.size() % pageSize;//如果有余数总页数+1if(mod > 0 ){totalPage = totalPage + 1;}//迭代取出每页内容for(int pageNo = 0;pageNo<totalPage;pageNo++){Integer start = pageSize * pageNo;Integer end = pageSize * (pageNo + 1);//避免超出列表最⼤界if(end > list.size()){end = list.size();}System.out.println("start:"+start+",end:"+end);List<String> subList = list.subList(start,end);System.out.println(StringUtils.join(subList,","));}}。
java中表格分页技术
实验十表格1.实验目的:掌握表格的创建和表格模型的创建以及在按钮的添加和监听事件,掌握分页技术的原理。
2.实验题目:在一个框架中添加一个表格和四个按钮:首页,前一页,后一页,末页。
点击按钮达到分页的目的3.实验代码:package JTabel;import java.awt.*;import java.awt.event.*;import java.util.Vector;import javax.swing.*;import javax.swing.table.*;public class JavaHomework{static int currentPageNumber;static int pagesize=5;//每一页有五行数据static int maxPageNumber;//总的页数public static void main(String args[]){final JFrame frame=new JFrame("表格的分页");frame.setBounds(300,300,300,300);Vector<String> columnName=newVector<String>();columnName.add("序号");columnName.add("平方数");Vector<Vector<String>> rowData=new Vector<Vector<String>>();for(int i=0;i<23;i++){Vector<String> addEveryRowdata=new Vector<String>();addEveryRowdata.add(String.valueOf(i));addEveryRowdata.add(String.valueOf(i*i));rowData.add(addEveryRowdata);}final DefaultTableModel tablemodel=new DefaultTableModel(rowData,columnName);final JTable table=new JTable(tablemodel);frame.add(new JScrollPane(table));//添加四个按钮JPanel panel=new JPanel();final JButton homepagebutton=new JButton("首页");final JButton previouspagebutton=new JButton("前一页");final JButton thenextpagebutton=new JButton("后一页");final JButton endpagebutton=new JButton("末页");panel.add(homepagebutton);panel.add(previouspagebutton);panel.add(thenextpagebutton);panel.add(endpagebutton);maxPageNumber=(int)Math.ceil(tablemodel.getR owCount()/(pagesize-1));System.out.println(maxPageNumber);homepagebutton.addActionListener(new ActionListener(){p ublic void actionPerformed(ActionEvent e){currentPageNumber=1;Vectordatavector=tablemodel.getDataVector();DefaultTableModel newmodel=new DefaultTableModel();newmodel.setColumnIdentifiers(new Object[]{"序号","平方数"});for(int i=0;i<5;i++){newmodel.addRow((Vector)datavector.elementAt (i));}table.setModel(newmodel);homepagebutton.setEnabled(false);previouspagebutton.setEnabled(false);thenextpagebutton.setEnabled(true);endpagebutton.setEnabled(true);}});previouspagebutton.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){currentPageNumber--;Vectordatavector=tablemodel.getDataVector();DefaultTableModel newmodel=new DefaultTableModel();newmodel.setColumnIdentifiers(new Object[]{"序号","平方数"});for(int i=0;i<pagesize;i++){newmodel.addRow((Vector)datavector.elementAt ((int)(pagesize*(currentPageNumber-1)+i)));}table.setModel(newmodel);if(currentPageNumber==1){homepagebutton.setEnabled(false);previouspagebutton.setEnabled(false);thenextpagebutton.setEnabled(true);endpagebutton.setEnabled(true);}});thenextpagebutton.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){currentPageNumber++;Vectordatavector=tablemodel.getDataVector();DefaultTableModel newmodel=new DefaultTableModel();newmodel.setColumnIdentifiers(new Object[]{"序号","平方数"});if(currentPageNumber==maxPageNumber) thenextpagebutton.setEnabled(false);endpagebutton.setEnabled(false);else{for(int i=0;i<pagesize;i++)newmodel.addRow((Vector)datavector.elementAt ((int)(pagesize*(currentPageNumber-1)+i)));}table.setModel(newmodel);homepagebutton.setEnabled(true);previouspagebutton.setEnabled(true);}});endpagebutton.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){currentPageNumber=maxPageNumber;Vectordatavector=tablemodel.getDataVector();DefaultTableModel newmodel=new DefaultTableModel();newmodel.setColumnIdentifiers(new Object[]{"序号","平方"});intendpagesize=(int)(tablemodel.getRowCount()-page size*(maxPageNumber-1));if(endpagesize==5){for(int i=0;i<pagesize;i++)newmodel.addRow((Vector)datavector.elementAt((i nt)(pagesize*(maxPageNumber-1)+i)));}else{for(int i=0;i<endpagesize;i++)newmodel.addRow((Vector)datavector.elementAt((i nt)(pagesize*(maxPageNumber-1)+i)));}table.setModel(newmodel);homepagebutton.setEnabled(true);previouspagebutton.setEnabled(true);thenextpagebutton.setEnabled(false);endpagebutton.setEnabled(false);}});frame.add(panel,BorderLayout.SOUTH);frame.setVisible(true);}}4:编译结果首页第二页第三页第四页。
关于Java后台分页
关于Java后台分页原理,前台传⼊每页显⽰条数,及当前的页码后台有条件查询显⽰到页⾯上页⾯上显⽰样式为本例⼦:是点击查询按钮获得数据进⾏分页的情况(如页⾯已加载就获得数据只需初始化时就调⽤⽅法即可)⾸先是前台jsp 页⾯⽤于显⽰分页的结构<ul class="page" maxshowpageitem="6" pagelistcount="10" id="page"></ul><div name="findBtn" type="find" caption="查询" onclick="queryGXLXMCData()" class="btn btn-default">查询按钮</div> jsp 页⾯需引⼊<link href="page.css" type="text/css" rel="stylesheet" /><script language='javascript' type='text/javascript' src="page.js"></script>js:/*** 点击查询按钮查询列表数据*/function queryGXLXMCData2(pageIndex,callSucFlag){var sub = new WingsSubmit(); //设置分页数据if(!pageIndex) {pageIndex = 1;}sub.pushData("pageIndex", pageIndex);//当前是第⼏页sub.pushData("pageNumber", 10);//每页10条数据sub.setCtrl('GxfxCtrl_queryGxmcList');if(callSucFlag) {sub.setFunction("onSuccess", "loadQueryDataSuccess();");}sub.submit();}function queryGXLXMCData(pageIndex){var sub = new WingsSubmit();sub.pushData("gxmcs", ywcjcode);//设置分页数据if(!pageIndex) {pageIndex = 1;}sub.pushData("pageIndex", pageIndex);//当前是第⼏页sub.pushData("pageNumber", 10);//每页10条数据sub.setCtrl('GxfxCtrl_queryGxmcList');sub.setFunction("onSuccess", "loadQueryDataSuccess();");sub.submit();}function loadQueryDataSuccess(res) {$('#cxgxGrid').show();var dataNumber = res.getAttr("pageCount");$("#page").show();setPage(dataNumber);}//设置分页function setPage(pageCount) {pageNumber = $("#page").attr("pagelistcount");$("#page").initPage(pageCount,1,function(p) {queryGXLXMCData2(p);});} ctrl://分页查询数据的⼀共的条数------------------------------------------------------final Map<String, Object> pageMap = (Map<String, Object>) SwordServiceUtils.callService("SWZJ.DSJYPT.GXYT005.GETDATAMAXNUMBER", map);final int dataNumInt = Integer.parseInt(pageMap.get("maxnum")+"");//分页查询当前请求的数据------------------------------------------------------final List<Map<String, Object>> cxgxAllList = (List<Map<String, Object>>) SwordServiceUtils .callService("SWZJ.DSJYPT.GXYT005.QUERGXCXALLDATA", map); res.addTable("cxgxGrid", cxgxAllList);res.addAttr("pageCount", dataNumInt);return res; 后台:DAO://查询⼀共多少条数据⽤于分页 sql: "select COUNT(*) maxNum from mx_gxyt_fxdpzb b,mx_gxyt_gxlxdm m where b.gxlx_dm=m.gxlx_dm and b.ywcj_dm = ?"public Map<String, Object> getAllDataCount(Map<String, Object> map) throws SwordBaseCheckedException {final SQLParam param = new SQLParam();final String gxmcs = (String) map.get("gxmcs");if (CastUtils.isNull(gxmcs)) {param.addParam(gxmcs);} else {param.addParam(gxmcs);}final Map<String, Object> listResulMap = SwordPersistenceUtils.getPersistenceService().queryMapByKey("hdxt_dsjypt_gxyt000031_glfxsballgxcount", param); if (CastUtils.isNull(listResulMap)) {final Map<String, Object> resultNum = new HashMap<String, Object>();resultNum.put("maxnum", 0);return resultNum;}return listResulMap;}//⽤于查询每页数据 sql:select m.gxlx_dm,m.gxlxmc,c.gxlxmc as glgxlx ,b.fxd,c.gxlx_dm as sjgxdm from mx_gxyt_gxlxdm m left join mx_gxyt_gxlxdm con m.sjgxlx_dm = c.gxlx_dm left join mx_gxyt_fxdpzb b on b.gxlx_dm=m.gxlx_dm where b.ywcj_dm=? and b.fxd>0 LIMIT ?,?public List<Map<String, Object>> queryCxgxAllList(Map<String, Object> map) throws SwordBaseCheckedException {final SQLParam param = new SQLParam();final String gxmcs = (String) map.get("gxmcs");if (CastUtils.isNull(gxmcs)) {param.addParam(gxmcs);} else {param.addParam(gxmcs);}final String pageIndex = map.get("pageIndex") + "";final String pageNumber = map.get("pageNum") + "";param.addParam((Integer.parseInt(pageIndex) - 1) * Integer.parseInt(pageNumber));param.addParam(Integer.parseInt(pageIndex) * Integer.parseInt(pageNumber));List<Map<String, Object>> result = this.getPersistenceService().queryMapListByKey("hdxt_dsjypt_gxyt000032_glfxsballgxpage", param);result = getLastListMap(result, Integer.parseInt(pageNumber));return result;}//获取list的最后10条数据private List<Map<String, Object>> getLastListMap(List<Map<String, Object>> list, int sizeNum) {final int curSize = list.size();if (curSize < sizeNum) {return list;}final List<Map<String, Object>> reList = new ArrayList<Map<String, Object>>();for (int i = 0; i < sizeNum; i++) {reList.add(list.get(curSize - sizeNum + i));}return reList;} page.css.zzsc{ margin:0 auto; width:580px; height:80px; border:1px solid #F00}.page{list-style: none;}.page>li{float: left;padding: 5px 10px;cursor: pointer;}.page .pageItem{border: solid thin #DDDDDD;margin: 5px;}.page .pageItemActive{border: solid thin #0099FF;margin: 5px;background-color: #0099FF;color:white;}.page .pageItem:hover{border: solid thin #0099FF;background-color: #0099FF;color:white;}.page .pageItemDisable{border: solid thin #DDDDDD;margin: 5px;background-color: #DDDDDD;} page.js/*** Created by zxm on 2017/3/31.*/$.fn.extend({"initPage":function(listCount,currentPage,fun){var maxshowpageitem = $(this).attr("maxshowpageitem");if(maxshowpageitem!=null&&maxshowpageitem>0&&maxshowpageitem!=""){page.maxshowpageitem = maxshowpageitem;}var pagelistcount = $(this).attr("pagelistcount");if(pagelistcount!=null&&pagelistcount>0&&pagelistcount!=""){page.pagelistcount = pagelistcount;}var pageId = $(this).attr("id");page.pageId=pageId;if(listCount<0){listCount = 0;}if(currentPage<=0){currentPage=1;}page.setPageListCount(listCount,currentPage,fun);}});var page = {"pageId":"","maxshowpageitem":5,//最多显⽰的页码个数"pagelistcount":10,//每⼀页显⽰的内容条数/*** 初始化分页界⾯* @param listCount 列表总量*/"initWithUl":function(listCount,currentPage){var pageCount = 1;if(listCount>=0){var pageCount = listCount%page.pagelistcount>0?parseInt(listCount/page.pagelistcount)+1:parseInt(listCount/page.pagelistcount); }var appendStr = page.getPageListModel(pageCount,currentPage);$("#"+page.pageId).html(appendStr);},/*** 设置列表总量和当前页码* @param listCount 列表总量* @param currentPage 当前页码*/"setPageListCount":function(listCount,currentPage,fun){listCount = parseInt(listCount);currentPage = parseInt(currentPage);page.initWithUl(listCount,currentPage);page.initPageEvent(listCount,fun);fun(currentPage);},"initPageEvent":function(listCount,fun){$("#"+page.pageId +">li[class='pageItem']").on("click",function(){page.setPageListCount(listCount,$(this).attr("page-data"),fun);});},"getPageListModel":function(pageCount,currentPage){var prePage = currentPage-1;var nextPage = currentPage+1;var prePageClass ="pageItem";var nextPageClass = "pageItem";if(prePage<=0){prePageClass="pageItemDisable";}if(nextPage>pageCount){nextPageClass="pageItemDisable";}var appendStr ="";appendStr+="<li class='"+prePageClass+"' page-data='1' page-rel='firstpage'>⾸页</li>";appendStr+="<li class='"+prePageClass+"' page-data='"+prePage+"' page-rel='prepage'><上⼀页</li>";var miniPageNumber = 1;if(currentPage-parseInt(page.maxshowpageitem/2)>0&¤tPage+parseInt(page.maxshowpageitem/2)<=pageCount){miniPageNumber = currentPage-parseInt(page.maxshowpageitem/2);}else if(currentPage-parseInt(page.maxshowpageitem/2)>0&¤tPage+parseInt(page.maxshowpageitem/2)>pageCount){ miniPageNumber = pageCount-page.maxshowpageitem+1;if(miniPageNumber<=0){miniPageNumber=1;}}var showPageNum = parseInt(page.maxshowpageitem);if(pageCount<showPageNum){showPageNum = pageCount}for(var i=0;i<showPageNum;i++){var pageNumber = miniPageNumber++;var itemPageClass = "pageItem";if(pageNumber==currentPage){itemPageClass = "pageItemActive";}appendStr+="<li class='"+itemPageClass+"' page-data='"+pageNumber+"' page-rel='itempage'>"+pageNumber+"</li>";}appendStr+="<li class='"+nextPageClass+"' page-data='"+nextPage+"' page-rel='nextpage'>下⼀页></li>";//appendStr+="<li class='"+nextPageClass+"' page-data='"+pageCount+"' page-rel='lastpage'>尾页</li>";return appendStr;}}。
java分页详解
<%@ page language="java" import="java.util.*,com.fit.*,java.sql.*" pageEncoding="gbk"%> <%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><html><head></head><body><center><%int pagesize=10;//每页显示的条数int currentpage=1;//当前页数int allsize=30;//总记录数String keyword=null;%><%keyword = request.getParameter("text");%><%request.setCharacterEncoding("gbk");Connection conn = Jdbc.getConn();Statement stmt = conn.createStatement();String sql1=null;if(keyword==null){sql1 = "select count(*) from person";}else{sql1 = "select count(*) from person where uid like '%"+keyword+"%' or name like '%"+keyword+"%'";//System.out.println(sql1);}ResultSet rs1 = stmt.executeQuery(sql1);if(rs1.next()){allsize = rs1.getInt(1);rs1.close();}String sql=null;if(keyword==null){sql = "select * from person";}else{sql = "select * from person where uid like '%"+keyword+"%' or name like '%"+keyword+"%'";}stmt = conn.createStatement();ResultSet rs = stmt.executeQuery(sql);%><%try{currentpage = Integer.parseInt(request.getParameter("cp")) ;//当前页数}catch(Exception e){}%><%int allpage = (allsize+pagesize-1)/pagesize;//计算总页数%><script language="javaScript">function openpage(curpage){document.page.cp.value = curpage;document.page.submit();}function selOpenPage(){document.page.cp.value = document.page.selpage.value;document.page.submit();}</script><form name="page" action="index.jsp" method="post" width="80%" >输入查询关键字:<input type="text" size="20" name="text" value="<%= keyword %>"><input type="submit" value="查询"><br><br><%if(allsize!=0){%><input type="button" value="首页" onClick="openpage(1)" <%= currentpage ==1?"disabled":""%>><input type="button" value="上一页" onClick="openpage(<%= currentpage-1 %>)" <%= currentpage ==1?"disabled":""%>><input type="button" value="下一页" onClick="openpage(<%= currentpage+1 %>)" <%= currentpage ==allpage?"disabled":""%>><input type="button" value="尾页" onClick="openpage(<%= allpage %>)" <%= currentpage ==allpage?"disabled":""%>><input type="hidden" name="cp" value=""><%= currentpage %>/<%= allpage %>跳转到<select name="selpage" onChange="selOpenPage()"><%for(int x=1;x<=allpage;x++){%><option value="<%=x%>" <%=currentpage==x?"selected":""%>><%=x%></option><%}%></select>页<%} %></form><table border="1" width="80%"><tr><td>个数</td><td>用户id</td><td>用户姓名</td><td>用户密码</td></tr><%for(int i=0;i<(currentpage-1)*pagesize;i++){rs.next();}for(int i=0;i<pagesize;i++){if(rs.next()){%><tr><td><%= rs.getInt("id") %></td><td><%= rs.getString("uid") %></td><td><%= rs.getString("name") %></td><td><%= rs.getString("password") %></td></tr><%}}rs.close();stmt.close();conn.close();%></table></center></body></html>。
java分页原理及实现方式
Java分页原理及常用分页方法什么是分页技术分页,是一种将所有数据分段展示给用户的技术•用户每次看到的不是全部数据,而是其中的一部分。
如果在其中没有找到自习自己想要的内容,用户可以通过制定页码或是翻页的方式转换可见内容,直到找到自己想要的内容为止.其实这和我们阅读书籍很类似,我们不能把整本书的全部内容写在一页纸上。
为什么要分页?1、加载少量数据,减少客户的和服务器数据交互,降低服务器压力。
2、增强用户体验,每次加载数据量少,加载速度自然就快,用户体验就好。
常见分页样式:1、传统分页(分页工具栏),如百度的分页:<■上一页 1 2 3 4 5 G 7 B 5 ID T—页= 2、自动加载:如QQ空间下拉自动加载数据传统分页与下拉式分页对比传统分页可以明确数据信息,数量等;下拉式无法明确数据量等信息,分页后之前从信息还在页面上。
常见分页实现方式1. Java程序分页的实现主要是用List接口中的subList(int startlndex,int endindex)方法,这种方式也称为程序内存分页。
2. 使用数据库的SQL语句实现数据分页。
适用于数据量较大,访问频度较低的操作。
如果数据量大,访问频度又高,可以参考大数据分页。
关于内存分页当数据量较小时推荐使用。
使用subList进行分页时,如果数据量比较大是一个非常耗费系统资源的方案。
目前web项目有许多分布式系统,可能有多个系统访问同一个数据库,那么对数据库的开销就比较大了,这时可以考虑对内存分页进行优化,例如利用程序缓存处理机制等。
其实真正的内存分页不是那么简单的事情,要实现一个完整的通用的机制,不是一两个小时就能搞定的。
首先有一个数据记录的服务器缓存问题,然后才是数据记录分页问题,这个相对好解决一点,但第一个问题就不太好组织。
因为缓存问题涉及到数据的缓存位置,缓存时间,删除时间和利于查询的数据组织问题。
数据库分页:数据库分页的原理比较明确了,根据需要取结果集中的一部分就是了,没什么好说的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1引言 (2)1.1编写目的 (2)1.2背景 (2)1.3定义 (2)1.4参考资料 (4)2程序系统的结构 (4)3程序1(标识符)设计说明 (5)3.1程序描述 (5)3.2功能 (5)3.3性能 (6)3.4输人项 (6)3.5输出项 (6)3.6算法 (6)3.7流程逻辑 (8)3.8接口 (9)3.9存储分配 (9)3.10注释设计 (9)3.11限制条件 (9)3.12测试计划 (9)3.13尚未解决的问题 (9)详细设计说明书1引言1.1编写目的简化软件、程序开发,为程序员软件开发节省大量时间。
1.2背景说明:a.系统名称:软件程序----------分页类;b.任务提出者:刘官升;c.开发者:巩远义;d.用户:适合所有程序开发人员;1.3定义类:处理分页的程序类Page类连接数据库查询数据类EntityHibernate类外文词组:result 数据集合start 本页数据在数据集中的起始位置pageSize 每页数据的记录数totalCount 总数据集合的记录数pageNo 页码currentPageNo 当前页码lastPageNo 尾页页码定义方法:/***hql查询分页返回list*@param pageNo 页码*@param pageSize 每页数据大小*@param totalCount 总数据数*@param hql*@return*/public List listHql(int pageNo,int pageSize,int totalCount,String hql)/***分页查询函数hql不带参数*@param hql*@param pageSize每页显示数据大小*@param totalCount总条数*@param pageNo页号*@return new Page(list,startIndex,totalCount,pageSize)*/public Page pageHql(String hql,int pageSize,int totalCount,int pageNo)/***hql分页查询*@param hql*@param pageNo当前页数*@param pageSize每页显示数据条数*@return new page*/public Page pageHql(int pageNo,int pageSize,String hql)/***分页查询函数,使用hql 返回Page**@param hql使用named query parameter as<tt>from Foo foo where *foo.bar=:bar</tt>.*Map param =new HashMap();*param.put(“bar”,“xxx”);*@param pageNo页号,从0开始.*@param pageSize页大小*@param param a java.util.Map*@return new Page(list,startIndex,totalCount,pageSize)*/public Page pagedHqlQuery(String hql, int pageNo, int pageSize, int totalCount, Map param)/***分页查询函数,使用sql*@param pageNo页号*@param pageSize页大小*@param totalCount总条数*@param sql*@return new Page(list,startIndex,totalCount,pageSize)*/public Page pagedSqlQuery(int pageNo,int pageSize,int totalCount,String sql)/***分页查询函数,使用hql**@param hql使用named query parameter as<tt>from Foo foo where foo.bar=:bar</tt>.*@param pageNo页号,从0开始.*@param pageSize页大小*@param param a java.util.Map*@return new Page(list,startIndex,totalCount,pageSize)*/public Page pagedHqlQuery(int pageNo, int pageSize, String hql,Map param)/***获取hql查询的总条数*@param hql查询hql语句*@return*@throws Exception*/public Integer getHqlCount(String hql)/***获取sql查询的总条数*@param sql查询sql语句*@return*@throws Exception*/public Integer getSqlCount(String sql)1.4参考资料a./project/Pager;b./p1222.html;c.JQuery_1.4_API.CHM;2程序系统的结构EntityHibernate.class引用包import java.util.List;import java.util.Map;import org.hibernate.Query;import org.hibernate.transform.Transformers;importorg.springframework.orm.hibernate3.support.HibernateDaoSupport; Page.class 引用包import java.io.Serializable;import java.util.ArrayList;import java.util.List;import ng.builder.ToStringBuilder;3程序1(标识符)设计说明从本章开始,逐个地给出各个层次中的每个程序的设计考虑。
以下给出的提纲是针对一般情况的。
对于一个具体的模块,尤其是层次比较低的模块或子程序,其很多条目的内容往往与它所隶属的上一层模块的对应条目的内容相同,在这种情况下,只要简单地说明这一点即可。
3.1程序描述在hibernate框架基础之上开发的一套可重用的分页组件。
3.2功能3.3性能适用于以hibernate为底层框架的任何地方。
3.4输人项传入的参数:int pageNo,int pageSize,int totalCount,需要查询的hql或者sql语句3.5输出项输出对象Page,包含数据集3.6算法Page类处理/***构造函数-默认**@param result本页包含的数据*@param start本页在数据集中的起始位置*@param totalCount数据库记录数*@param pageSize页容量*/public Page(List results, int start, int totalCount, int pageSize) {if (results == null) {this.result = new ArrayList();}else if (results.size() <= pageSize) {this.result = results;} else {this.result = new ArrayList();for(int i = start; (i < start + pageSize) && (i < results.size()); i++)this.result.add(results.get(i));}this.start = start;this.pageSize = (pageSize > 0) ? pageSize : DEFAULT_PAGE_SIZE;this.totalCount = totalCount;}/***当前页*/public int getCurrentPageNo() {return start / pageSize + 1;}/***获取最大页/总页数*/public int getLastPageNo() {return (totalCount + pageSize - 1) / pageSize; }/***当前页记录*/public List getResult() {return result;}/***取数据库中包含的总记录数*/public int getTotalCount() {return totalCount;}/***判断是否有下一页*/public boolean hasNextPage() {return getCurrentPageNo() < getLastPageNo();}/***判断是否有前一页*/public boolean hasPrevPage() {return getCurrentPageNo() > 1;}/***获取指定页在数据集中的起始位置,每页条数使用默认值(从0开始) */public static int getStartOfPage(int pageNo) {return getStartOfPage(pageNo, DEFAULT_PAGE_SIZE);}/***获取指定页在数据集中的起始位置(从0开始)**@param pageNo*@param pageSize*@return*/public static int getStartOfPage(int pageNo, int pageSize) { return Math.max((pageNo - 1) * pageSize, 0);}Hibernate设置查询数据int startIndex=Page.getStartOfPage(pageNo, pageSize);query.setFirstResult(startIndex);query.setMaxResults(pageSize);3.7流程逻辑3.8接口用图的形式说明本程序所隶属的上一层模块及隶属于本程序的下一层模块、子程序,说明参数赋值和调用方式,说明与本程序相直接关联的数据结构(数据库、数据文卷)。
Service层调用EntityHibernate entityHibernate需要传递的参数int pageNo,int pageSize,int totalCount,String hql或者String sql如:public Page pageMapQuery(int pageNo,int pageSize,int totalCount) 3.9存储分配无3.10注释设计a.加在模块首部的注释;b.加在各分枝点处的注释;3.11限制条件需以hibernate为底层框架。