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日

相关文章

  • JAVA API 实用类 String详解

    JAVA API 实用类 String详解 String类概述 在Java中,String类是一个非常重要的类,被广泛应用于很多领域。String类是Java API(应用程序接口)中提供的常用的实用类。String类没有公共构造方法,因此在创建String对象时,可以直接使用字面值创建对象。 String类的常用方法: length():获取字符串长度 c…

    Java 2023年5月26日
    00
  • 使用maven生成可执行的jar包的方法

    生成可执行的jar包是Maven的一个非常重要的功能, 可以将所有依赖打包成一个jar文件,方便部署和分发应用程序。下面是使用Maven生成可执行的jar包的步骤: 步骤1:创建Maven项目 首先我们需要创建一个Maven项目,并在pom.xml文件中添加插件来生成可执行的jar包。 步骤2:设置Maven插件 在pom.xml文件中添加如下配置,以使用M…

    Java 2023年5月20日
    00
  • ArrayList集合初始化及扩容方式

    ArrayList是Java中常用的集合类之一,它可以动态的添加或删除元素,使用灵活方便。在使用ArrayList过程中,了解其初始化和扩容方式非常重要,能够有效提高代码效率。下面是详细讲解: ArrayList初始化 无参构造函数初始化 使用无参构造函数初始化ArrayList集合时,默认创建一个空集合,如下: ArrayList<String&gt…

    Java 2023年5月26日
    00
  • mybatis自动建表的实现方法

    MyBatis是一个流行的ORM框架,可以让开发人员通过简单的配置实现Java对象与关系型数据库之间的映射。它支持自动建表,在配置文件中添加一些参数,就可以让MyBatis自动创建数据库表结构。下面是实现自动建表的步骤: 1. 添加自动建表所需的依赖 在pom.xml文件中添加如下依赖: <dependency> <groupId>o…

    Java 2023年5月20日
    00
  • 详解JAVA中的OPTIONAL

    详解JAVA中的Optional Java中的Optional是Java8中新增的类,用于解决空指针异常。Optional类通过包装对象的形式,判断对象是否为空,从而避免空指针异常。 Optional基本概念 Optional的创建 Optional的创建有两种方法:empty()和of(T value)。 当要创建一个空的Optional对象时,可以使用e…

    Java 2023年5月26日
    00
  • SpringBoot整合Shiro的方法详解

    在Spring Boot中,Shiro是一个非常流行的安全框架,它可以帮助开发者轻松地实现身份验证、授权和加密等功能。在本攻略中,我们将详细介绍如何使用Shiro,并提供两个示例来说明其用法。 以下是两个示例,介绍如何使用Shiro: 示例一:使用注解方式 注解方式是Shiro中一种非常常用的方式,它可以帮助开发者快速地实现身份验证和授权。以下是一个示例,介…

    Java 2023年5月15日
    00
  • SpringBoot实现动态配置及项目打包部署上线功能

    关于 SpringBoot 实现动态配置及项目打包部署上线功能的攻略,我们可以分为以下几个步骤: 在项目中引入 SpringBoot 的配置应用依赖; 实现动态配置功能,可以使用 SpringCloudConfig 或者自定义实现; 打包部署并上线项目,可使用 Docker 镜像部署等方式。 下面我们来逐步详细介绍这些步骤。 引入 SpringBoot 配置…

    Java 2023年5月19日
    00
  • 关于MyBatis各种SQL操作详解

    关于MyBatis各种SQL操作详解 MyBatis是一款优秀的持久层框架,它允许使用简单的xml或注解来映射Java对象和数据库记录。在MyBatis中,SQL是通过Mapper文件来进行配置的,Mapper文件中定义了各种SQL语句以及参数映射规则。接下来详细介绍MyBatis中各种SQL操作。 插入数据 在MyBatis中插入数据非常简单,只需要在Ma…

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