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的分页原理详解⾸先先创建⼀个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在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是一种跨平台的面向对象编程语言,具有简单易学、安全可靠和高效性的特点。

在软件开发领域,Java被广泛应用于Web应用、移动应用和企业级应用等多个领域。

为了确保Java程序的设计合理、结构清晰和代码可维护性,编写Java详细设计说明书是非常必要的。

三、设计目标本文档的设计目标如下:1. 描述Java程序的整体架构和模块划分,使开发人员能清晰理解程序结构。

2. 详细描述各个模块的功能和相互关系,确保程序的模块化和低耦合性。

3. 说明每个类的设计思路和功能,确保类的职责单一和高内聚性。

4. 提供方法级的设计说明,确保方法的输入输出和实现逻辑清晰明了。

5. 给出必要的代码示例和注释,方便开发人员理解和使用。

四、设计概述本Java程序是一个学生信息管理系统,主要包括学生信息的录入、查询、修改和删除等功能。

系统的整体架构采用三层架构(表现层、业务逻辑层和数据访问层),以实现功能模块的分离和重用。

1. 表现层表现层是用户与系统交互的界面,负责接收用户输入和显示系统输出。

在本程序中,我们使用Swing框架开发了一个简单的图形用户界面(GUI),包括菜单、输入框和按钮等组件。

2. 业务逻辑层业务逻辑层是程序的核心部分,负责处理用户请求和业务逻辑。

在本程序中,我们设计了以下几个业务模块:- 学生信息录入模块:负责接收用户输入的学生信息,对其进行验证和保存。

- 学生信息查询模块:负责根据用户提供的条件查询学生信息,并将结果返回给用户。

- 学生信息修改模块:负责根据用户提供的条件修改学生信息。

- 学生信息删除模块:负责根据用户提供的条件删除学生信息。

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,并将数据列表传递给构造函数。

JavaWeb实现分页的四种方法

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中,分页是在处理大量数据时一种常见的需求。

通常,我们使用一些参数,比如页数和每页条目数,来实现分页。

以下是一个简单的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类包含了一些基本的分页功能,包括获取当前页的数据、获取总页数、翻到下一页、翻到上一页等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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为底层框架。

相关文档
最新文档