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日

相关文章

  • maven scope provided和runtime的例子说明

    Maven是Java项目中十分常用的构建工具,它提供了一系列功能和机制来管理项目中的依赖。Maven中的“scope”是指依赖范围,即描述一个依赖在何种情况下可用的属性。Maven中常用的依赖范围主要有compile、provided、runtime、test和system。 其中,provided和runtime经常一起使用,我们来详细讲解一下它们的区别和…

    Java 2023年6月2日
    00
  • 世界著名程序SpringMVC完整过程

    以下是关于“世界著名程序SpringMVC完整过程”的完整攻略,其中包含两个示例。 1. 前言 SpringMVC是一种常用Java Web开发框架,其核心思想是基于MVC模式来实现Web应用程序的开发。本攻略将详细讲解SpringMVC的完整过程,帮助读者深入理解SpringMVC框架的工作原理。 2. SpringMVC完整过程 以下是SpringMVC…

    Java 2023年5月16日
    00
  • java中throws实例用法详解

    Java中throws实例用法详解 什么是异常? 在编写 Java 代码的过程中,我们有时候会遇到一些错误,例如访问一个不存在的文件,访问 null 对象,或者调用方法时传入了非法参数等。这些错误被称为异常。 异常在运行时被抛出,程序会尝试去处理这个异常,如果未能处理,则会导致程序中断。Java 中的异常继承自 Java.lang.Throwable 类。 …

    Java 2023年5月27日
    00
  • Java编程实现获取当前代码行行号的方法示例

    在讲解“Java编程实现获取当前代码行行号的方法示例”的完整攻略之前,我们先来了解一下所涉及的相关概念: 首先,所谓的行号(line number),就是指代码中每一行所对应的编号。在Java代码中,每个代码文件都有其独立的行号,而且每行都是有编号的。 其次,获取行号有两种常用的方法: 1.使用StackTraceElement类中的getLineNumbe…

    Java 2023年5月26日
    00
  • SpringBoot DataSource数据源实现自动配置流程详解

    下面就给你讲解一下“SpringBoot DataSource数据源实现自动配置流程详解”的完整攻略。 一、DataSource数据源实现自动配置概述 在我们开发一个项目时,需要我们配置数据源,SpringBoot提供了自动配置数据源的功能。SpringBoot对JDBC的封装使得开发人员能够快速地进行数据源配置,通过少量的配置就可以连接到数据库。 二、Da…

    Java 2023年5月20日
    00
  • SpringBoot整合Security安全框架实现控制权限

    接下来我将详细讲解Spring Boot如何整合Spring Security实现权限控制。 一、Spring Security简介 Spring Security是一个基于Spring的安全框架,提供了全面的安全服务,包括认证和授权等。通过Spring Security,用户可以轻松地实现基于角色的访问控制(RBAC)、LDAP 认证、OpenID、CAS…

    Java 2023年5月20日
    00
  • Servlet实现共享数据JavaWeb组件的几种方法

    让我们来详细讲解一下“Servlet实现共享数据JavaWeb组件的几种方法”。 1. 什么是JavaWeb组件 JavaWeb组件是指在JavaWeb开发中,可以复用的独立模块。主要包括以下几种组件: Servlet:处理HTTP请求和响应的Java类。 JSP:以HTML页面为基础,嵌入Java代码实现动态网页。 Filter:在请求和响应之间对数据进行…

    Java 2023年5月20日
    00
  • 详解SpringBoot之集成Spring AOP

    下面是详解SpringBoot之集成SpringAOP的完整攻略: 什么是Spring AOP Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架中的一个重要模块。它实现了基于代理的AOP,并且与IOC容器无缝集成,提供了便捷的配置方式。 面向切面编程就是将通用的横切关注点(如日志、安全、事务等)从…

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