欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringData JPA分页查询

程序员文章站 2022-04-30 13:59:28
...

首先我们需要知道SpringData JPA 的几个接口

SpringData JPA分页查询

SpringData JPA分页查询SpringData JPA分页查询

SpringData JPA分页查询


其实看名字就大概懂了,也可以很方便的使用

首先我们的持久化层继承JpaRepository,相当于继承了增删改查的持久化层以及分页查询的持久化层

所以如果我们要使用分页查询 ,我们只需要直接调用

SpringData JPA分页查询

由一开始的图也可以看到Pageable的其中一个实现,直接新建一个对象传给你的持久层即可

下面是一个小Demo的例子

package Dao;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.transaction.annotation.Transactional;

import Entity.Student;

//不需要使用事物注解,因为Spring已经默认帮我们开启 当然我们可以利用注解进行额外的设置
//对数据进行除了查询之外我们都需要加入事物注解不然报错 这是我个人测试
public interface StudentDao extends JpaRepository,CommonDao{
	
	@Query("from Student s where s.sid = ?1")
	Student findById(String id);
//	两种写法一样
//	@Query("select * from Student s where s.sid = :id")
//	Student findById(@Param("id")String id);
	
	@Transactional
	@Query("delete from Student s where s.sid = ?1")
	@Modifying//更新或者删除需要额外加这个注解
	void deleteById(String id);
	
	//父类方法直接调用 findAll(Pageable pageable)
}


//Service 层
public Page findAll(Pageable pageable) {
		// TODO Auto-generated method stub
		return studentDao.findAll(pageable);
	}

//Controller
@RequestMapping("/findAll")
	public Page findAll(@RequestParam("f")int pageNum,@RequestParam("m")int size){
		return studentService.findAll(new PageRequest(pageNum, size));
	}
下面是返回结果:

{"content":[{"sid":"1","sname":"sam","sage":1},{"sid":"2","sname":"2","sage":2},{"sid":"3","sname":"3","sage":3}],"totalPages":1,"totalElements":3,"last":true,"number":0,"size":20,"numberOfElements":3,"sort":null,"first":true}