java-SSH2实现数据库和界面的分页

下面是“java-SSH2实现数据库和界面的分页”的完整攻略:

准备工作

  1. 创建一个Web工程,并配置好SSH2框架。
  2. 在项目中引入MySQL的JDBC驱动包。
  3. 编写JSP页面,用于展示分页数据。

实现分页查询功能

第一步:编写DAO层代码

  1. DAO层是负责与数据库进行交互的层级,我们将在该层实现查询数据的功能。
  2. 在DAO层中,首先要编写一个查询总记录数的方法,用于确定分页的总页数。
  3. 其次,编写查询具体数据的方法,需要传入分页的起始位置和每页展示的记录数。
  4. 代码示例:
public interface UserDao {
    // 查询总记录数
    int getTotalCount();

    // 分页查询数据
    List<User> getUserList(int startIndex, int pageSize);
}

public class UserDaoImpl extends BaseDaoImpl<User> implements UserDao {
    // 查询总记录数
    public int getTotalCount() {
        String hql = "select count(*) from User";
        Number count = (Number) getSession().createQuery(hql).uniqueResult();
        return count.intValue();
    }

    // 分页查询数据
    public List<User> getUserList(int startIndex, int pageSize) {
        String hql = "from User";
        Query query = getSession().createQuery(hql);
        query.setFirstResult(startIndex);
        query.setMaxResults(pageSize);
        return query.list();
    }
}

第二步:编写Service层代码

  1. Service层是负责业务逻辑的层级,我们将在该层调用DAO层的方法,并完成数据的分页处理。
  2. 首先,编写查询分页数据的方法,需要传入当前页数和每页展示的记录数,同时需要调用DAO层的获取总记录数和查询具体数据的方法,计算出分页的总页数,并将计算结果放入Pager对象中返回给Controller层。
  3. 代码示例:
public interface UserService {
    // 查询分页数据
    Pager<User> getUserPager(int currentPage, int pageSize);
}

public class UserServiceImpl extends BaseServiceImpl<User> implements UserService {
    private UserDao userDao;

    public UserDao getUserDao() {
        return userDao;
    }

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    // 查询分页数据
    public Pager<User> getUserPager(int currentPage, int pageSize) {
        //获取总条数
        int totalCount = userDao.getTotalCount();

        //计算总页数
        int totalPages = (totalCount + pageSize - 1) / pageSize;

        //计算分页起始位置
        int startIndex = (currentPage - 1) * pageSize;

        //调用DAO层查询分页数据
        List<User> userList = userDao.getUserList(startIndex, pageSize);

        //将查询结果封装到Pager对象中
        Pager<User> pager = new Pager<>();
        pager.setCurrentPage(currentPage);
        pager.setPageSize(pageSize);
        pager.setTotalRecord(totalCount);
        pager.setTotalPage(totalPages);
        pager.setList(userList);

        return pager;
    }
}

第三步:编写Controller层代码

  1. Controller层是负责与视图层进行交互的层级,我们将在该层调用Service层的方法,并将分页数据封装到ModelAndView对象中返回给JSP页面。
  2. 首先,编写展示分页数据的方法,在该方法中需要接收当前页数pageNum和每页展示的记录数pageSize的参数,并将其传入Service层中的查询分页数据的方法中,同时需要将查询结果封装到ModelAndView对象中并返回给JSP页面。
  3. 其次,在JSP页面中展示数据并添加分页展示的功能。
  4. 代码示例:
public class UserController {
    private UserService userService;

    public UserService getUserService() {
        return userService;
    }

    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    //展示分页数据
    public ModelAndView showUserList(int pageNum, int pageSize) {
        Pager<User> pager = userService.getUserPager(pageNum, pageSize);
        ModelAndView mv = new ModelAndView("userList");
        mv.addObject("pager", pager);
        return mv;
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>用户列表</title>
</head>
<body>
    <table>
        <thead>
            <tr>
                <th>ID</th>
                <th>用户名</th>
                <th>密码</th>
            </tr>
        </thead>
        <tbody>
            <c:forEach items="${pager.list}" var="user">
                <tr>
                    <td>${user.id}</td>
                    <td>${user.username}</td>
                    <td>${user.password}</td>
                </tr>
            </c:forEach>
        </tbody>
    </table>
    <c:if test="${pager.totalPage > 1}">
        <div>
            <c:if test="${pager.currentPage > 1}">
                <a href="?pageNum=${pager.currentPage - 1}&amp;pageSize=${pager.pageSize}">上一页</a>
            </c:if>
            <c:forEach var="i" begin="1" end="${pager.totalPage}">
                <c:choose>
                    <c:when test="${pager.currentPage == i}">
                        <span>${i}</span>
                    </c:when>
                    <c:otherwise>
                        <a href="?pageNum=${i}&amp;pageSize=${pager.pageSize}">${i}</a>
                    </c:otherwise>
                </c:choose>
            </c:forEach>
            <c:if test="${pager.currentPage < pager.totalPage}">
                <a href="?pageNum=${pager.currentPage + 1}&amp;pageSize=${pager.pageSize}">下一页</a>
            </c:if>
        </div>
    </c:if>
</body>
</html>

示例展示

这里给出两个示例:

示例一

假设我们需要展示第3页,每页展示10条数据,并且在DAO层中查询到的数据如下:

[
  {id: 1, username: "张三", password: "123456"},
  {id: 2, username: "李四", password: "123456"},
  {id: 3, username: "王五", password: "123456"},
  {id: 4, username: "赵六", password: "123456"},
  {id: 5, username: "钱七", password: "123456"},
  {id: 6, username: "孙八", password: "123456"},
  {id: 7, username: "周九", password: "123456"},
  {id: 8, username: "吴十", password: "123456"},
  {id: 9, username: "郑十一", password: "123456"},
  {id: 10, username: "马十二", password: "123456"},
  {id: 11, username: "陈十三", password: "123456"},
  {id: 12, username: "黄十四", password: "123456"},
  {id: 13, username: "林十五", password: "123456"}
]

则分页查询结果应为:

[
  {id: 21, username: "陈二十一", password: "123456"},
  {id: 22, username: "黄二十二", password: "123456"},
  {id: 23, username: "林二十三", password: "123456"},
  {id: 24, username: "张二十四", password: "123456"},
  {id: 25, username: "李二十五", password: "123456"},
  {id: 26, username: "王二十六", password: "123456"},
  {id: 27, username: "赵二十七", password: "123456"},
  {id: 28, username: "钱二十八", password: "123456"},
  {id: 29, username: "孙二十九", password: "123456"},
  {id: 30, username: "周三十", password: "123456"}
]

示例二

假设我们需要展示每页展示5条数据,而在DAO层中查询到的数据总共有15条,其中分别是1、2、3……15号数据。

则分页查询结果应为:

第1页,展示1、2、3、4、5号数据。

第2页,展示6、7、8、9、10号数据。

第3页,展示11、12、13、14、15号数据。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java-SSH2实现数据库和界面的分页 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • javaweb购物车案列学习开发

    首先我们来讲一下”javaweb购物车案例学习开发”的完整攻略。 知识储备 在学习JavaWeb购物车之前,需要具备一些Java基础知识,比如面向对象编程、基本的Java语法、JSP基础语法、Servlet基础知识、JDBC数据库操作等。如果没有接触过这些知识,请先学习相关基础课程。 构思 在开始开发之前,需要有一个完整的购物车设计。购物车的基本结构包括商品…

    Java 2023年6月2日
    00
  • bool当成函数参数错误理解

    当我们需要在函数的参数中使用布尔类型时,有时会犯一些容易混淆的错误。其中一个常见的错误是将bool类型当成了一个函数参数来使用。具体来说,这种错误的表现形式是将一个bool类型的变量名作为实参,传递给了一个接受一个函数指针或函数对象的函数。 这种错误的原因在于bool类型的变量可以隐式转换为函数指针或函数对象。具体来说,当一个bool类型的变量被用在需要一个…

    Java 2023年5月26日
    00
  • 什么是Java安全管理器?

    Java安全管理器是Java运行时环境提供的一种访问控制机制,用于控制Java程序的访问权限。它的作用是为Java程序提供安全保障,限制其对系统资源的访问和操作,保证程序的安全性。 Java安全管理器可以通过在程序运行时设置Java安全策略文件来实现,这个策略文件定义了一组规则,规定了Java程序可以访问哪些资源、以什么方式访问、如何检查访问权限等。通过使用…

    Java 2023年5月11日
    00
  • Java高级面试题小结

    让我给大家详细讲解“Java高级面试题小结”的完整攻略。 简介 “Java高级面试题小结”是一篇系统总结Java面试中常出现的高级难点问题以及解决方案的文章。该文主要分为以下几个部分: Java高级面试题分类 Java高级面试题解析及解决方案 Java高级面试题分类 Java高级面试题主要分为以下几个类别: 多线程 并发集合 垃圾回收算法 反射机制 设计模式…

    Java 2023年5月26日
    00
  • Java Apache Commons报错“ZipOverflowException”的原因与解决方法

    “ZipOverflowException”是Java的Apache Commons类库中的一个异常,通常由以下原因之一引起: 压缩文件过大:如果压缩文件过大,则可能会出现此异常。例如,可能会尝试压缩一个超过2GB的文件。 压缩文件格式错误:如果压缩文件格式错误,则可能会出现此异常。例如,可能会使用错误的压缩文件格式或压缩文件包含非法字符。 以下是两个实例:…

    Java 2023年5月5日
    00
  • springboot项目快速搭建的方法步骤

    下面我会为您详细讲解使用 Spring Boot 快速搭建项目的方法步骤。 准备工作 在开始使用 Spring Boot 快速搭建项目之前,需要准备以下软件: JDK 1.8 或以上版本 Maven 3.x 或以上版本 步骤一:创建Spring Boot项目 使用Spring官方提供的构建工具Spring Initializr,可以快速创建一个 Spring…

    Java 2023年5月15日
    00
  • 浅谈springboot自动装配原理

    浅谈Spring Boot自动装配原理 Spring Boot是一个基于Spring框架的快速开发框架,它可以帮助我们快速构建Web应用程序。Spring Boot提供了许多自动配置类,可以帮助我们自动配置应用程序。本文将深入探讨Spring Boot自动装配的原理。 自动装配原理 Spring Boot的自动装配原理是基于Spring框架的自动装配原理。S…

    Java 2023年5月14日
    00
  • Java组件javabean用户登录实例详解

    Java组件javabean用户登录实例详解 什么是JavaBean? JavaBean 是Java语言编写的可重用组件,具有如下特征: 公共的无参构造方法 成员变量为私有的,公共的Getter和Setter方法 可序列化 用户登录实例 本文将介绍如何使用JavaBean实现用户登录功能。 编写JavaBean 首先,我们要编写一个JavaBean,该Jav…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部