java 分页查询list
时间: 2025-02-06 18:35:24 浏览: 38
### Java 实现分页查询 `List` 示例
#### 使用 Spring Data JPA 进行分页查询
通过集成 `JpaRepository` 接口,能够便捷地执行分页逻辑。定义商品仓库接口如下:
```java
public interface ProductRepository extends JpaRepository<Product, Long> {
}
```
在控制器内实现分页功能的具体方法为:
```java
@GetMapping("/products")
public ResponseEntity<Page<Product>> listProducts(@RequestParam int page, @RequestParam int size) {
Pageable pageable = PageRequest.of(page, size);
Page<Product> products = productRepository.findAll(pageable);
return ResponseEntity.ok(products);
}[^1]
```
此方式利用了 Spring Data 提供的强大抽象机制来简化开发流程。
#### MyBatis 注解风格下的分页查询
对于采用 MyBatis 框架的应用程序而言,则可以通过自定义 SQL 映射以及相应的注解完成同样的工作。下面是一个基于类映射的实例展示如何关联班级及其学生列表的数据结构并支持分页请求:
```java
@Mapper
public interface ClasssMapper extends BaseMapper<Classs> {
@Select("select * from Classs limit #{start},#{limit}")
List<Classs> selectPagedClasses(@Param("start") Integer start,@Param("limit")Integer limit);
}
// Controller Code Snippet
@PostMapping("/classes/paged")
@ResponseBody
public Map<String,Object> getPagedList(
@RequestParam(value="pageNo",defaultValue="0")int pageNo,
@RequestParam(value="pageSize",defaultValue="10")int pageSize){
// Calculate offset based on current page number and desired items per page.
int startPosition=(pageNo-1)*pageSize;
List<Classs> pagedList=classsMapper.selectPagedClasses(startPosition,pageSize);
HashMap<String , Object> resultMap=new HashMap<>();
resultMap.put("totalPages",(long)Math.ceil((double)(classList.size())/pageSize));
resultMap.put("pagedData",pagedList);
return resultMap;
}[^2]
```
上述代码片段展示了怎样构建一个 RESTful API 来响应带有分页参数的 HTTP GET 请求,并返回经过分页处理后的实体集合给前端应用消费。
#### 针对 DB2 数据库的手动编写分页查询语句
当面对特定类型的数据库比如 IBM Db2 时,可能需要手动指定用于获取部分记录集的 SQL 查询字符串。这里给出一段适用于此类场景的例子:
```sql
SELECT *
FROM ( SELECT ROW_NUMBER() OVER(ORDER BY id ASC) AS rownum,* FROM table_name ) t
WHERE t.rownum BETWEEN ? AND ?
```
这段 SQL 可嵌入到应用程序中的 DAO 或者 Repository 组件里去,配合传入合适的起始位置和结束位置作为占位符的实际数值即可达成目的[^3]。
阅读全文
相关推荐

















