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日

相关文章

  • 2021年最新Redis面试题汇总(2)

    2021年最新Redis面试题汇总(2) 完整攻略 一、Redis中的事务 Redis的事务分为单条命令事务和多条命令事务。单条命令事务就是事务块中只包含一条命令,而多条命令事务就是在事务块中包含多条命令。 1.1 单条命令事务 在Redis中,单条命令事务使用MULTI、EXEC、WATCH和UNWATCH这四个命令来实现。其中: MULTI命令标记一个事…

    Java 2023年5月19日
    00
  • Maven的使用

    Maven 1.下载并配置 下载地址:https://maven.apache.org/download.cgi?. 配置环境变量 新建系统变量,变量名为MAVEN_HOME,变量值为 maven 的安装路径 编辑名为Path的系统变量,然后点击新建,输入 %MAVEN_HOME%\bin 配置完成,测试一下 ==> win+r输入cmd,在命令行输入…

    Java 2023年4月23日
    00
  • SpringBoot项目打成War布署在Tomcat的详细步骤

    下面为您介绍SpringBoot项目打成War包并部署在Tomcat的详细步骤。 一、将SpringBoot项目转化为War包 在pom.xml文件中修改packaging为war,添加servlet-api依赖。 <packaging>war</packaging> <!– 添加servlet-api依赖 –> &l…

    Java 2023年5月19日
    00
  • 如何自定义hibernate validation注解示例代码

    自定义Hibernate Validation注解可以通过以下步骤来完成: 1. 定义注解 自定义注解需要使用@Constraint注解进行标记,并提供以下信息: validatedBy:用于指定执行验证逻辑的验证器类; message:用于指定验证不通过时返回的错误消息; groups:用于指定验证所属的组,默认情况下采用javax.validation.…

    Java 2023年5月20日
    00
  • maven中心仓库OSSRH使用简介(推荐)

    Maven中心仓库OSSRH使用简介(推荐) 如果你是一位Maven项目的开发者,那么你一定会遇到需要将你的项目打包上传到Maven中央仓库的情况。Maven中央仓库是Maven项目的官方仓库,大多数的第三方依赖库都可以在Maven中央仓库上找到。然而,如果你是一个独立的开发者或者组织,你不一定能够将你的项目上传到Maven中央仓库,那么你需要寻找其他的Ma…

    Java 2023年5月19日
    00
  • Spring Boot实现热部署的实例方法

    下面是详细讲解“Spring Boot实现热部署的实例方法”的完整攻略,攻略分为如下部分: 介绍热部署的概念和优势 Spring Boot实现热部署的配置方法和步骤 附带两个示例说明 1. 热部署的概念和优势 热部署(Hot Deployment)是指在应用程序运行时,对已经部署的程序代码进行修改,无需停止应用程序,即可自动更新代码的部署方式。热部署能够极大…

    Java 2023年5月26日
    00
  • Java编程实现swing圆形按钮实例代码

    关于“Java编程实现swing圆形按钮实例代码”的攻略,以下是一些实现步骤: 1. 创建一个新的Java项目 首先,在你的Java开发环境中,创建一个新的Java项目。 2. 导入Swing库 在Java项目中,导入Swing库,其中包括“javax.swing.*”等相关类。 3. 创建一个圆形按钮 在Java源文件中,创建一个圆形按钮。你可以使用Jav…

    Java 2023年5月19日
    00
  • Spring Boot请求处理之常用参数注解使用教程

    下面是“Spring Boot请求处理之常用参数注解使用教程”的完整攻略。 介绍 在使用 Spring Boot 处理 HTTP 请求时,我们经常需要获取请求的数据,比如请求参数、请求头等信息。Spring Boot 提供了一些常用的参数注解,可以帮助我们轻松地获取这些数据。本教程将介绍常用的参数注解以及如何使用它们。 本教程的内容如下: 获取请求参数 @R…

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