PagingAndSortingRepository 接口 [实现分页和查询]

文章介绍了如何在SpringDataJPA中,通过让自定义接口继承PagingAndSortingRepository,实现对数据的分页和排序功能,无需包含筛选条件。示例展示了从Entity到Controller的完整流程,包括Entity定义、Dao接口扩展、Service业务处理以及Controller的请求处理方法。
摘要由CSDN通过智能技术生成

接口继承于 CrudRepository 接口,拥有CrudRepository 接口的所有方法, 并新增两个功能:分页和排序。 但是这两个方法不能包含筛选条件。

使用方法:

/**
 * PagingAndSortingRepository 接口使用
 * 定义的方法名称 参考文档定义
 * 提供分页和排序功能
 */
public interface UserDao extends PagingAndSortingRepository<Users,Integer> {
 
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class TestDemo {
 
    @Autowired
    private UserDao usersDao;
 
 
    /**
     * 分页
     */
    @Test
    public void test1(){
        int page = 0; //page:当前页的索引。注意索引都是从 0 开始的。
        int size = 3;// size:每页显示 3 条数据
        PageRequest pageable= new PageRequest(page, size);
        Page<Users> p = this.usersDao.findAll(pageable);
        System.out.println("数据的总条数:"+p.getTotalElements());
        System.out.println("总页数:"+p.getTotalPages());
        List<Users> list = p.getContent();
        for (Users users : list) {
            System.out.println(users);
        }
    }
 }

案例:

1.Entity 实体类

package com.dwx.bean;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="t_book")
public class Book {
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Integer bookId;			//图书编号
	private String bookName;		//图书名称
	private String category;		//类别
	private String author;			//作者
	private String press;			//出版社
	private Double price;			//价格
	public Integer getBookId() {
		return bookId;
	}
	public void setBookId(Integer bookId) {
		this.bookId = bookId;
	}
	public String getBookName() {
		return bookName;
	}
	public void setBookName(String bookName) {
		this.bookName = bookName;
	}
	public String getCategory() {
		return category;
	}
	public void setCategory(String category) {
		this.category = category;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public String getPress() {
		return press;
	}
	public void setPress(String press) {
		this.press = press;
	}
	public Double getPrice() {
		return price;
	}
	public void setPrice(Double price) {
		this.price = price;
	}
}

2.Dao接口   使用PagingAndSortingRepository

package com.dwx.repository;
import org.springframework.data.repository.PagingAndSortingRepository;
import com.dwx.bean.Book;
public interface BookRepository extends PagingAndSortingRepository<Book, Integer> {
 
}

3.service 业务层

package com.dwx.service;
import javax.annotation.Resource;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import com.dwx.bean.Book;
import com.dwx.repository.BookRepository;
@Service
public class BookService {
	@Resource
	private BookRepository bookRepository;
	
	public Iterable<Book> findAllSort(Sort sort){
		return bookRepository.findAll(sort);
	}
	
	public Page<Book> findAll(Pageable page){
		return bookRepository.findAll(page);
	}
}

4. controller 控制层

package com.dwx.controller;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.dwx.bean.Book;
import com.dwx.service.BookService;
@RestController
public class BookController {
	@Resource
	private BookService bookService;
	
	@RequestMapping("/sort")
	public Iterable<Book> sortBook(){
		Sort sort=new Sort(Sort.Direction.DESC,"bookId");
		Iterable<Book> bookSort=bookService.findAllSort(sort);
		return bookSort;
	}
	
	@RequestMapping("/pager")
	public List<Book> sortPagerBook(int pageIndex){
		Sort sort=new Sort(Sort.Direction.DESC,"bookId");
		Pageable page=PageRequest.of(pageIndex-1, 2,sort);
		Page<Book> bookDatas=bookService.findAll(page);
		List<Book> books=bookDatas.getContent();
		return books;
	}
}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MongoRepository 可以通过继承 PagingAndSortingRepository 接口实现分页查询。具体步骤如下: 1. 在 Repository 接口中继承 PagingAndSortingRepository 接口: ```java import org.springframework.data.repository.PagingAndSortingRepository; public interface UserRepository extends PagingAndSortingRepository<User, String> { } ``` 2. 在 Service 层中调用 Repository 的方法,并传入 Pageable 对象来实现分页查询: ```java import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; @Service public class UserService { private final UserRepository userRepository; public UserService(UserRepository userRepository) { this.userRepository = userRepository; } public Page<User> findAll(Pageable pageable) { return userRepository.findAll(pageable); } } ``` 3. 在 Controller 中调用 Service 的方法,并传入 Pageable 对象来接收分页查询结果: ```java import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class UserController { private final UserService userService; public UserController(UserService userService) { this.userService = userService; } @GetMapping("/users") public Page<User> getUsers(@RequestParam(value = "page", defaultValue = "0") int page, @RequestParam(value = "size", defaultValue = "10") int size) { PageRequest pageRequest = PageRequest.of(page, size); return userService.findAll(pageRequest); } } ``` 以上是基于 Spring Data MongoDB 和 MongoRepository 实现分页查询的一个示例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值