jsp hibernate的分页代码

让我为你详细讲解一下jsp hibernate的分页代码攻略。

1. 准备工作

在开始编写分页代码之前,我们需要先进行一些准备工作:

  1. 首先,需要在项目中添加hibernate和相关的依赖库,可以使用maven等工具进行导入。

示例如下:

xml
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.28.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.4.28.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate.common</groupId>
<artifactId>hibernate-commons-annotations</artifactId>
<version>5.1.2.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.1.7.Final</version>
</dependency>

  1. 接下来,需要在配置文件中添加分页相关的配置,其中包括每页显示数量、当前页码等信息。

示例如下:

properties
data.page.pageSize=10 # 每页显示数量
data.page.pageNo=1 # 当前页码
data.page.totalPage=0 # 总页数
data.page.totalRows=0 # 总记录数

2. 实现分页功能

接下来,我们可以开始编写分页代码了,具体步骤如下:

  1. 首先,在Controller层中实现获取当前分页信息的方法,这个方法需要根据前端传递过来的参数(如当前页码、每页显示数量等)查询数据库,并设置好分页所需的各个参数(如总记录数、总页数等)。

示例如下:

```java
@RequestMapping("/list")
public String list(ModelMap modelMap, Integer pageNo, Integer pageSize) {
// 初始化分页对象
Page page = new Page<>();
page.setPageNo(pageNo);
page.setPageSize(pageSize);

   // 查询总记录数
   Long totalCount = newsService.getCount();
   page.setTotalRows(totalCount.intValue());

   // 查询当前页数据
   List<News> newsList = newsService.getListByPage(page);

   // 计算总页数
   int totalPage = totalCount.intValue() % pageSize == 0 ? totalCount.intValue() / pageSize : totalCount.intValue() / pageSize + 1;
   page.setTotalPage(totalPage);

   // 将结果放入Model中
   modelMap.put("newsList", newsList);
   modelMap.put("page", page);

   return "news/list";

}
```

  1. 接下来,在Service层中实现查询数据的方法,这个方法需要使用hibernate的分页查询功能,根据前面步骤中设置好的分页参数查询数据库并返回查询结果。

示例如下:

```java
public List getListByPage(Page page) {
CriteriaBuilder cb = entityManager.getCriteriaBuilder();

   CriteriaQuery<News> query = cb.createQuery(News.class);
   Root<News> root = query.from(News.class);

   query.select(root);

   TypedQuery<News> typedQuery = entityManager.createQuery(query);
   typedQuery.setFirstResult((page.getPageNo() - 1) * page.getPageSize());
   typedQuery.setMaxResults(page.getPageSize());

   return typedQuery.getResultList();

}
```

  1. 最后,在JSP页面中展示分页控件和数据。

示例如下:

```jsp

${news.title} ${news.content} ${news.createTime}

```

至此,我们已经完成了jsp hibernate的分页代码的编写工作。

3. 示例说明

下面,我将为你演示如何使用我们编写的代码实现分页功能。

示例1

首先,我们在页面中展示一个新闻列表,并希望能够对其进行分页展示。具体步骤如下:

  1. 在页面中设置分页控件,用于跳转到不同页码的页面。

示例如下:

```html

```

  1. 在Controller层中编写分页查询方法,用于获取当前页的数据。

示例如下:

```java
@RequestMapping("/newsList")
public String newsList(ModelMap model, @RequestParam(defaultValue = "1") int pageNo, @RequestParam(defaultValue = "10") int pageSize) {
Page page = new Page<>();
page.setPageNo(pageNo);
page.setPageSize(pageSize);

   List<News> list = newsService.getListByPage(page);
   Long count = newsService.getCount();

   page.setTotalRows(count.intValue());
   int totalPage = count.intValue() / pageSize + (count.intValue() % pageSize == 0 ? 0 : 1);
   page.setTotalPage(totalPage);

   model.addAttribute("newsList", list);
   model.addAttribute("page", page);

   return "news_list";

}
```

  1. 在Service层中编写查询方法,用于获取当前页的数据。

示例如下:

```java
public List getListByPage(Page page) {
String hql = "from News";
Query query = entityManager.createQuery(hql);

   int start = (page.getPageNo() - 1) * page.getPageSize();
   query.setFirstResult(start);
   query.setMaxResults(page.getPageSize());

   return query.getResultList();

}
```

示例2

接下来,我们还可以实现一个更加高级的分页功能:根据关键字进行搜索,并返回相应的查询结果列表。具体步骤如下:

  1. 在Controller层中实现关键字查询方法,用于根据关键字查询记录。

示例如下:

```java
@RequestMapping("/search")
public String search(Model model, @RequestParam String keyword, @RequestParam(defaultValue = "1") int pageNo, @RequestParam(defaultValue = "10") int pageSize) {
Page page = new Page<>();
page.setPageNo(pageNo);
page.setPageSize(pageSize);

   Long count = newsService.getCountByKeyword(keyword);
   page.setTotalRows(count.intValue());
   int totalPage = count.intValue() / pageSize + (count.intValue() % pageSize == 0 ? 0 : 1);
   page.setTotalPage(totalPage);

   List<News> list = newsService.getListByKeywordAndPage(keyword, page);

   model.addAttribute("newsList", list);
   model.addAttribute("page", page);

   return "search_result";

}
```

  1. 在Service层中实现关键字查询方法,用于根据关键字查询记录。

示例如下:

```java
public Long getCountByKeyword(String keyword) {
String hql = "select count(*) from News where title like :keyword or content like :keyword";
Query query = entityManager.createQuery(hql);
query.setParameter("keyword", "%" + keyword + "%");

   return (Long) query.getSingleResult();

}
```

  1. 接下来,在Service层中实现根据关键字和分页查询的方法。

示例如下:

```java
public List getListByKeywordAndPage(String keyword, Page page) {
String hql = "from News where title like :keyword or content like :keyword order by id desc";
Query query = entityManager.createQuery(hql);
query.setParameter("keyword", "%" + keyword + "%");

   int start = (page.getPageNo() - 1) * page.getPageSize();
   query.setFirstResult(start);
   query.setMaxResults(page.getPageSize());

   return query.getResultList();

}
```

至此,我们已经完成了高级分页功能的编写工作。

4. 总结

本文中,我们详细讲解了jsp hibernate的分页代码攻略,包括准备工作、实现分页功能以及两个示例说明。希望这篇教程能够对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jsp hibernate的分页代码 - Python技术站

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

相关文章

  • java算法之静态内部类实现雪花算法

    下面我来为您详细讲解Java算法之静态内部类实现雪花算法的完整攻略。 什么是雪花算法 雪花算法是分布式系统中生成唯一ID的一种算法,其核心思想是在64位的二进制数中,用前41位作为时间戳,后23位作为机器标识和序列号,从而可以实现在分布式系统中生成唯一ID。 静态内部类实现雪花算法 算法设计思路 定义一个类Snowflake,其构造方法接收两个参数:机器ID…

    Java 2023年5月26日
    00
  • Java实现Timer的定时调度函数schedule的四种用法

    一、背景介绍 Java中提供了一个Timer类,是一种比较简单的定时器实现,比如我们可以基于这个类实现类似于 Linux 中 Cron 一样定时执行某些任务的功能。其中,定时调度函数 schedule 是 Timer 类最常用的方法之一,他用于安排指定的任务在指定的时间点或者经过指定的延迟后执行一次。这个函数有 4 种用法,下面将详细讲解。 二、使用方法 s…

    Java 2023年5月20日
    00
  • java如何将一个float型数的整数部分和小数分别输出显示

    要将一个float型数的整数部分和小数部分分别输出显示,可以使用Java中的数学函数和字符串格式化。下面是完整的攻略。 步骤一:获取float型数的整数部分和小数部分 获取float型数的整数部分可以使用Java中的Math.floor()函数,该函数将返回小于或等于输入值的最大整数。获取float型数的小数部分可以将float数减去它的整数部分,得到的结果…

    Java 2023年5月26日
    00
  • 【SSM】一、了解Sping 框架

    〇、Maven 0.1 什么是Maven? Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project’s build…

    Java 2023年4月25日
    00
  • Java介绍多线程计算阶乘实现方法

    Java介绍多线程计算阶乘实现方法 多线程是Java编程语言中提供了一种处理器和其他资源的并行协作方式。它可以为程序员提供一种实现异步编程、并行代码以及提高程序性能的方式。本文将介绍在Java中如何通过多线程计算阶乘。 基本概念 阶乘是一个正整数的连乘积,如4! = 4 * 3 * 2 * 1 = 24。计算阶乘是一种高 CPU 使用率的密集计算,这意味着使…

    Java 2023年5月18日
    00
  • MyBatis数组与集合判断空问题

    标题:MyBatis数组与集合判断空问题 在MyBatis中,当我们要查询数据库中的一些数据,比如ID列表或者名称列表等,通常会用到数组或集合来进行传参,但在使用这些参数时,我们需要考虑判断它们是否为空,避免出现空指针异常。本文将介绍MyBatis中数组与集合如何进行空检查。 方法一:使用OGNL表达式 OGNL(Object-Graph Navigatio…

    Java 2023年5月26日
    00
  • JSP 相关对象的使用介绍

    JSP(Java Server Pages)是一种在Java EE(Enterprise Edition)应用程序中创建动态网页的技术。在 JSP 页面中,可以使用多个内置对象来帮助 Java 代码与页面交互和实现数据传输。本文将详细介绍 JSP 相关对象的用法。 request request 对象是 JSP 页面中的一个内置对象,它代表 HTTP 请求。…

    Java 2023年6月15日
    00
  • 详解Java中static关键字和内部类的使用

    详解Java中static关键字和内部类的使用 Java中的static关键字和内部类是程序设计中非常重要的特性,本文将全面讲解它们的使用。 static关键字 概念 static关键字可以用来修饰类的成员变量和成员方法。 当static关键字被修饰成员变量时,该变量成为静态变量,也可以称为类变量。静态变量的特点是在内存中只有一份,无论有多少个对象被创建,静…

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