举例详解用Java实现web分页功能的方法

我来详细讲解一下“举例详解用Java实现web分页功能的方法”的完整攻略。下面我将按照步骤一一说明,包含两条示例。

1. 在Java Web应用中实现分页

在Java Web应用中实现分页的基本思路是:查询需要分页的数据,然后根据页面大小和当前页码将数据切分成多个子集,最后将某个子集的数据展示在页面上。整个过程可以通过以下步骤实现:

1.1 定义分页查询参数

定义查询参数包括页面大小和当前页码等信息。在Java中,可以通过一个POJO(Plain Old Java Object)类来表示这些参数。示例代码如下:

public class PageParam {
    // 页面大小
    private int pageSize;
    // 当前页码
    private int currentPage;

    // getter 和 setter 略
}

1.2 查询总记录数

在分页查询前,需要先查询总记录数,以便计算总页数。可以使用SQL语句或ORM框架(如Mybatis)来实现。示例代码如下:

public int getTotalCount() {
    // 执行查询总记录数的SQL或Mybatis Mapper
    return totalCount;
}

1.3 计算总页数

根据页面大小和总记录数,可以计算出总页数。示例代码如下:

public int getTotalPages(int pageSize) {
    return (int) Math.ceil(totalCount / (pageSize *
             1.0));
}

1.4 分页查询数据

根据页面大小和当前页码,可以计算出需要查询的数据范围。可以使用SQL语句或ORM框架(如Mybatis)来实现。示例代码如下:

public List<T> getData(int pageSize, int currentPage) {
    // 计算需要查询的数据范围
    int start = (currentPage - 1) * pageSize;
    int end = (currentPage * pageSize) > totalCount ?
            totalCount : (currentPage * pageSize);

    // 执行分页查询的SQL或Mybatis Mapper
    return dataList;
}

1.5 页面展示数据

将查询到的数据展示在页面上,可以使用模板引擎(如Thymeleaf)来实现。示例代码如下:

<div th:each="data : ${dataList}">
  <p th:text="${data.name}"></p>
  <p th:text="${data.age}"></p>
</div>

2. 示例1:使用Mybatis实现web分页功能

下面示例是使用Mybatis框架实现Web分页功能,包含了查询总记录数、计算总页数、分页查询和页面展示数据的完整代码。示例中假设已经建立好了Mybatis的Mapper映射文件和实体类。

2.1 编写Mapper接口

public interface UserMapper {
    // 查询总记录数
    int countUser();
    // 分页查询
    List<User> selectUserList(@Param("start") int start,
                              @Param("pageSize") int pageSize);
}

2.2 编写Mapper映射文件

<mapper namespace="com.example.dao.UserMapper">
    <!-- 查询总记录数 -->
    <select id="countUser" resultType="int">
        select count(*) from user
    </select>

    <!-- 分页查询 -->
    <select id="selectUserList" resultType="User">
        select * from user
        limit #{start}, #{pageSize}
    </select>
</mapper>

2.3 编写DAO接口

public interface UserDao {
    int countUser();
    List<User> getUserList(int pageSize, int currentPage);
}

2.4 编写DAO实现类

public class UserDaoImpl implements UserDao {
    public static final int PAGE_SIZE = 10;

    private SqlSession sqlSession;

    public UserDaoImpl(SqlSession sqlSession) {
        this.sqlSession = sqlSession;
    }

    public int countUser() {
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        return mapper.countUser();
    }

    public List<User> getUserList(int pageSize, int currentPage) {
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        int start = (currentPage - 1) * PAGE_SIZE;
        int end = currentPage * PAGE_SIZE;

        return mapper.selectUserList(start, pageSize);
    }
}

2.5 编写Service层

@Service
public class UserService {
    @Autowired
    private UserDao userDao;

    public PageResult<User> getUserList(int currentPage) {
        PageResult<User> pageResult = new PageResult<>();

        int totalCount = userDao.countUser();
        int totalPages = (int) Math.ceil(totalCount * 1.0 / UserDaoImpl.PAGE_SIZE);
        List<User> userList = userDao.getUserList(UserDaoImpl.PAGE_SIZE, currentPage);

        pageResult.setTotalPages(totalPages);
        pageResult.setCurrentPage(currentPage);
        pageResult.setDataList(userList);

        return pageResult;
    }
}

2.6 页面展示数据

<!-- 分页 -->
<nav aria-label="Page navigation">
  <ul class="pagination">
    <li th:classappend="${pageResult.currentPage == 1} ? disabled : ''">
      <a th:href="@{/user/list(currentPage=${pageResult.currentPage - 1})}" aria-label="Previous">
        <span aria-hidden="true">&laquo;</span>
      </a>
    </li>
    <li th:each="i : ${#numbers.sequence(1, pageResult.totalPages)}" 
        th:classappend="${i == pageResult.currentPage} ? active : ''">
      <a th:href="@{/user/list(currentPage=${i})}" th:text="${i}"></a>
    </li>
    <li th:classappend="${pageResult.currentPage == pageResult.totalPages} ? disabled : ''">
      <a th:href="@{/user/list(currentPage=${pageResult.currentPage + 1})}" aria-label="Next">
        <span aria-hidden="true">&raquo;</span>
      </a>
    </li>
  </ul>
</nav>

<!-- 数据展示 -->
<div th:each="user : ${pageResult.dataList}">
  <p th:text="${user.name}"></p>
  <p th:text="${user.age}"></p>
</div>

3. 示例2:使用Spring Data JPA实现web分页功能

下面示例是使用Spring Data JPA框架实现Web分页功能,包含了查询总记录数、计算总页数、分页查询和页面展示数据的完整代码。

3.1 编写Repository接口

public interface UserRepository extends JpaRepository<User, Long> {
}

3.2 编写Service层

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    public PageResult<User> getUserList(int currentPage) {
        PageResult<User> pageResult = new PageResult<>();

        Pageable pageable = PageRequest.of(currentPage - 1, UserDaoImpl.PAGE_SIZE);
        int totalCount = (int) userRepository.count();
        int totalPages = (int) Math.ceil(totalCount * 1.0 / UserDaoImpl.PAGE_SIZE);
        List<User> userList = userRepository.findAll(pageable).getContent();

        pageResult.setTotalPages(totalPages);
        pageResult.setCurrentPage(currentPage);
        pageResult.setDataList(userList);

        return pageResult;
    }
}

3.3 页面展示数据

<!-- 分页 -->
<nav aria-label="Page navigation">
  <ul class="pagination">
    <li th:classappend="${pageResult.currentPage == 1} ? disabled : ''">
      <a th:href="@{/user/list(currentPage=${pageResult.currentPage - 1})}" aria-label="Previous">
        <span aria-hidden="true">&laquo;</span>
      </a>
    </li>
    <li th:each="i : ${#numbers.sequence(1, pageResult.totalPages)}" 
        th:classappend="${i == pageResult.currentPage} ? active : ''">
      <a th:href="@{/user/list(currentPage=${i})}" th:text="${i}"></a>
    </li>
    <li th:classappend="${pageResult.currentPage == pageResult.totalPages} ? disabled : ''">
      <a th:href="@{/user/list(currentPage=${pageResult.currentPage + 1})}" aria-label="Next">
        <span aria-hidden="true">&raquo;</span>
      </a>
    </li>
  </ul>
</nav>

<!-- 数据展示 -->
<div th:each="user : ${pageResult.dataList}">
  <p th:text="${user.name}"></p>
  <p th:text="${user.age}"></p>
</div>

以上就是用Java实现web分页功能的完整攻略,分别涉及了Mybatis和Spring Data JPA两种常用框架的实现方式。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:举例详解用Java实现web分页功能的方法 - Python技术站

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

相关文章

  • Java编程实现基于用户的协同过滤推荐算法代码示例

    首先来讲解一下“Java编程实现基于用户的协同过滤推荐算法”的完整攻略。 1.什么是协同过滤推荐算法 协同过滤推荐算法是一种根据用户的历史行为来推荐相似物品的算法。它与传统的推荐算法相比,具有更高的精度和个性化的特点。协同过滤推荐算法分为两种类型,即基于用户的协同过滤和基于物品的协同过滤。 2.基于用户的协同过滤推荐算法实现 基于用户的协同过滤推荐算法实现分…

    Java 2023年5月19日
    00
  • SpringBoot实现项目健康检查与监控

    实现项目健康检查与监控是一个较为常见的需求,可以通过Spring Boot Actuator提供的功能来轻松实现,下面是使用Spring Boot Actuator实现项目健康检查与监控的攻略: 1. 添加依赖 首先需要在项目中引入Spring Boot Actuator的相关依赖,在项目的pom.xml文件中添加以下依赖: <dependency&g…

    Java 2023年5月20日
    00
  • Spring Security如何为用户示例添加角色详解

    为用户添加角色,是在Spring Security中实现权限控制的重要手段。下面我将详细讲解Spring Security如何为用户示例添加角色,并提供两个示例说明。 1. 添加角色和权限 首先,需要添加角色和权限至Security配置文件中。示例配置代码如下: spring: security: user: name: admin password: ad…

    Java 2023年6月3日
    00
  • 10种提升android运行效率的建议

    10种提升Android运行效率的建议 Android是一个功能齐全的操作系统,但由于各种原因,它可能会变慢或运行不流畅。下面是10种提升Android运行效率的建议: 卸载不必要的应用程序 卸载不常用的应用程序可以释放存储空间和系统资源。如果您有很多不必要或重复的应用程序,可以通过卸载它们来提高性能。 例如,如果您有多个音乐播放器应用程序,但只使用其中一个…

    Java 2023年5月26日
    00
  • springboot实现注册加密与登录解密功能(demo)

    确认需求 在实现注册加密与登录解密功能之前,我们需要先确认需求。 我们需要一个使用SpringBoot实现的用户注册功能,并将用户的密码进行加密存储。同时,我们需要实现用户登录功能,并对用户输入的密码进行解密。 密码加密与解密 为了保证用户密码的安全性,我们需要将用户密码进行加密存储。常见的加密方式有MD5、SHA-1、SHA-256等。 下面是以MD5为例…

    Java 2023年5月20日
    00
  • 一篇文章带你搞懂Java线程池实现原理

    下面将从以下几个方面详细讲解Java线程池的实现原理: 线程池介绍 线程池是Java多线程中的一种重要机制,其主要作用包括控制并发线程数量、复用线程、管理并发任务等。线程池是一种节约线程创建和销毁所带来的开销的一种方案,可以避免重复创建和销毁线程,提高应用程序的性能和稳定性。 Java线程池通常由一个线程池管理器和一组工作线程组成,线程池管理器负责线程池的创…

    Java 2023年5月18日
    00
  • JSP入门教程(4)

    当然,我很高兴为您提供有关“JSP入门教程(4)”完整攻略的详细解释。 简介 在JSP入门教程的第四部分中,我们将学习如何使用JSP中的if-else语句和switch语句,这些语句用于控制流程和决策。 if-else语句 if-else语句是一种流程控制语句,可用于根据条件执行不同的代码块。在JSP页面中,可以使用以下语法来编写if-else语句: &lt…

    Java 2023年6月15日
    00
  • java中JSONArray互相转换List的实现

    Java中JSONArray和List的互相转换,可以使用JSON库中的方法来实现。下面我将详细讲解该转换的完整攻略,并提供两个示例。 JSONArray转List 1. 使用GSON库 首先需要引入GSON库的依赖,可以在maven中添加以下依赖: xml <dependency> <groupId>com.google.code.…

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