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库lombok及注解的使用学习

    这里是使用Lombok库和注解以减少Java代码开发工作的完整攻略: 1. 什么是Lombok库? Lombok是一个Java库,可以通过注解简化开发人员的代码编写量,减少样板代码的重复,从而提高代码的可读性和可维护性。使用Lombok,开发人员可以通过注解的方式自动生成getter和setter方法、构造器、日志、equals、HashCode和toStr…

    Java 2023年5月23日
    00
  • spring 整合JDBC和AOP事务的方法

    下面是详细讲解“spring 整合 JDBC 和 AOP 事务的方法”的完整攻略: 一、准备工作 引入 Spring 和 JDBC 的依赖 在 pom.xml 中添加以下依赖: <!– Spring –> <dependency> <groupId>org.springframework</groupId>…

    Java 2023年5月20日
    00
  • spring缓存代码详解

    Spring缓存代码详解 什么是Spring缓存? Spring缓存是一组在Spring应用程序中使用缓存的框架和模块,基于Java EE的JSR-107规范,提供了一致性且易于集成的缓存解决方案。它提供了一种方法来加速应用程序的性能,减轻系统负载,并提高应用程序的可伸缩性。 Spring缓存的工作原理 Spring缓存框架主要有两个核心概念:缓存管理器和缓…

    Java 2023年5月26日
    00
  • 基于resty orm的ActiveRecord操作数据指南

    基于resty orm的ActiveRecord操作数据指南 什么是ActiveRecord ActiveRecord 是一种 ORM 模式,在该模式下,对象的属性映射到数据库表的字段,一行记录对应于一个对象实例。 什么是resty orm resty orm 是 OpenResty 中提供的 ORM 实现,它支持 MySQL、PostgreSQL 和 Re…

    Java 2023年5月20日
    00
  • 什么是动态字节码生成?

    动态字节码生成是指在程序运行过程中通过程序生成字节码并将其加载进JVM,从而实现运行时动态生成代码的一种技术。 使用动态字节码生成的主要场景是:在程序运行过程中,需要根据不同的输入或状态,动态生成代码以完成特定的逻辑。另一个应用场景是AOP框架,其中动态字节码生成技术被用于实现切面编程。 下面是两个示例说明,帮助你更好地理解动态字节码生成的具体使用方法。 示…

    Java 2023年5月11日
    00
  • springboot jpa分库分表项目实现过程详解

    那我就来详细讲解一下“springboot jpa分库分表项目实现过程详解”的完整攻略。 1. 什么是分库分表 分库分表是一种水平扩展数据库的方式。 在一个分库分表的架构中,一个应用的数据被分为多个库或表。 这些库或表通常基于某个可配置的关键字划分数据。 比如用户ID可以作为划分关键字,用户的数据会根据关键字散列到多个库或表中。 2. 分库分表的优缺点 2.…

    Java 2023年5月20日
    00
  • 5个JAVA入门必看的经典实例

    下面我将详细讲解“5个JAVA入门必看的经典实例”的完整攻略。 1. 介绍 作为一名Java入门者,学好基础知识是必不可少的。在学习Java的过程中,掌握经典实例是非常重要的,可以帮助我们深入理解Java的基本语法和编程思想。本文总结了5个Java入门必看的经典实例,帮助初学者掌握Java编程的基本技能。 2. 经典实例1:计算圆的面积 第一个经典实例是计算…

    Java 2023年5月19日
    00
  • Java sha1散列算法原理及代码实例

    Java sha1散列算法原理及代码实例 前言 在软件开发场景中,我们经常会需要对敏感数据进行加密处理,以防止数据泄漏和恶意攻击。散列算法是一种很好的加密方式。本文将详细介绍Java中的sha1散列算法,包括原理及代码实例。 sha1散列算法原理 sha1散列算法是一种单向不可逆算法,通过该算法我们可以将任意长度的数据进行加密处理。在Java中,sha1散列…

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