让我为你详细讲解一下jsp hibernate的分页代码攻略。
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>
- 接下来,需要在配置文件中添加分页相关的配置,其中包括每页显示数量、当前页码等信息。
示例如下:
properties
data.page.pageSize=10 # 每页显示数量
data.page.pageNo=1 # 当前页码
data.page.totalPage=0 # 总页数
data.page.totalRows=0 # 总记录数
2. 实现分页功能
接下来,我们可以开始编写分页代码了,具体步骤如下:
- 首先,在Controller层中实现获取当前分页信息的方法,这个方法需要根据前端传递过来的参数(如当前页码、每页显示数量等)查询数据库,并设置好分页所需的各个参数(如总记录数、总页数等)。
示例如下:
```java
@RequestMapping("/list")
public String list(ModelMap modelMap, Integer pageNo, Integer pageSize) {
// 初始化分页对象
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";
}
```
- 接下来,在Service层中实现查询数据的方法,这个方法需要使用hibernate的分页查询功能,根据前面步骤中设置好的分页参数查询数据库并返回查询结果。
示例如下:
```java
public List
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();
}
```
- 最后,在JSP页面中展示分页控件和数据。
示例如下:
```jsp
```
至此,我们已经完成了jsp hibernate的分页代码的编写工作。
3. 示例说明
下面,我将为你演示如何使用我们编写的代码实现分页功能。
示例1
首先,我们在页面中展示一个新闻列表,并希望能够对其进行分页展示。具体步骤如下:
- 在页面中设置分页控件,用于跳转到不同页码的页面。
示例如下:
```html
```
- 在Controller层中编写分页查询方法,用于获取当前页的数据。
示例如下:
```java
@RequestMapping("/newsList")
public String newsList(ModelMap model, @RequestParam(defaultValue = "1") int pageNo, @RequestParam(defaultValue = "10") int pageSize) {
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";
}
```
- 在Service层中编写查询方法,用于获取当前页的数据。
示例如下:
```java
public List
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
接下来,我们还可以实现一个更加高级的分页功能:根据关键字进行搜索,并返回相应的查询结果列表。具体步骤如下:
- 在Controller层中实现关键字查询方法,用于根据关键字查询记录。
示例如下:
```java
@RequestMapping("/search")
public String search(Model model, @RequestParam String keyword, @RequestParam(defaultValue = "1") int pageNo, @RequestParam(defaultValue = "10") int pageSize) {
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";
}
```
- 在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();
}
```
- 接下来,在Service层中实现根据关键字和分页查询的方法。
示例如下:
```java
public List
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技术站