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 MyBatis拦截器Inteceptor详细介绍

    Java MyBatis拦截器Inteceptor详细介绍 什么是MyBatis拦截器Inteceptor MyBatis拦截器Inteceptor是MyBatis中的一个重要组件,使用拦截器可以实现对MyBatis的许多事务进行拦截和控制,比如SQL执行、查询结果处理等等。MyBatis拦截器Inteceptor主要由两部分组成:拦截器接口和拦截对象。 如…

    Java 2023年5月20日
    00
  • 浅聊JVM–基础版

    浅聊JVM–基础版 一、来源 jvm共有三种 Sun公司: HotSpot使用最多 BEA:JRockit IBM:J9VM ​ 今天我们主要了解的是Sun公司的HotSpot(关于HotSpot的爱恨情仇这里就不做过多解释了。)我们以前测试jdk是否安装成功,java的环境变量是否配置成功会使用java -version命令来检查。有一个细节大家可以看一…

    Java 2023年5月7日
    00
  • Java Spring框架简介与Spring IOC详解

    Java Spring框架简介 Spring是一个轻量级的Java框架,用于构建企业级应用程序。它提供了一系列的模块,包括Spring Core、Spring MVC、Spring Data、Spring Security等,可以帮助开发人员快速构建高质量的应用程序。 Spring框架的主要特点包括: 轻量级:Spring框架本身非常轻量级,不需要依赖其他的…

    Java 2023年5月18日
    00
  • 基于SpringBoot实现上传2种方法工程代码实例

    下面是关于“基于SpringBoot实现上传2种方法工程代码实例”的攻略: 1. 概述 SpringBoot提供了很多方便开发的功能,其中之一就是文件上传。文件上传需要前端页面和后端接口配合实现。前端页面负责UI界面展示和获取用户输入,后端接口负责接收上传的文件并保存在服务器上。 2. 文件上传方法 2.1. 前端表单上传 前端表单上传是指用户在页面上填写表…

    Java 2023年5月20日
    00
  • 生成无限制的微信小程序码的示例代码

    生成无限制的微信小程序码需要通过调用微信开发者工具的接口实现。下面是详细的步骤: 1. 开启开发者工具服务器功能 在微信开发者工具的顶栏中点击“设置”按钮,在弹出的设置页面中开启“开发者工具服务”,如果之前没有设置安全域名,开启之后需要先设置安全域名。 2. 获取 session_key 调用 wx.login() 方法获取 code,然后通过以下方式获取 …

    Java 2023年5月23日
    00
  • JAVA帮助文档全系列 JDK1.5 JDK1.6 JDK1.7 官方中英完整版整理

    JAVA帮助文档全系列 JDK1.5 JDK1.6 JDK1.7 官方中英完整版整理 Java是一门非常流行的编程语言,并且拥有着相当完备的文档支持。首先需要明确的是,JDK(Java Development Kit)是JAVA开发工具包,其中包含了许多与开发相关的工具和应用程序。因此,JDK中所包含的文档,便是JAVA开发者苦苦寻找的官方文档。下面介绍如何…

    Java 2023年5月20日
    00
  • 一文带你掌握Spring Security框架的使用

    一文带你掌握Spring Security框架的使用 Spring Security是基于Spring框架的应用安全解决方案。它提供了一系列的安全服务,如身份认证、授权、攻击防护等等。本文将介绍Spring Security的使用方法,帮助读者快速上手。 1. 引入Spring Security 在Maven工程中,在pom.xml文件中添加以下依赖: &l…

    Java 2023年5月19日
    00
  • java 基于maven多模块合并打包部署的操作过程

    下面我将详细讲解“java 基于maven多模块合并打包部署的操作过程”的完整攻略。 一、背景知识 在使用 Maven 管理多模块 Java 项目时,通常会出现需要将多个子模块合并成为一个独立的可部署应用程序的情况。本攻略的目的就是帮助你完成这一操作。 二、操作步骤 以下是基于 Maven 的多模块合并打包部署的操作步骤: 1. 创建一个 Maven 项目 …

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