JPA越来越丰富了,下面使用springboot3.x实现JPA分页

通过传入PageRequest pageRequest = PageRequest.of(page, size);到接口查询,返回Page<Entity>拿到分页数据。

依赖

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>

数据库配置

spring.jpa.show-sql=true
spring.jpa.open-in-view=false
spring.jpa.hibernate.ddl-auto=update
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&nullCatalogMeansCurrent=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.hikari.maximum-pool-size=10
spring.datasource.hikari.poolName=db1

启动类

@SpringBootApplication
@EnableJpaRepositories("top.lingkang.lingdongmall.repository")
@EntityScan("top.lingkang.lingdongmall.entity")
public class LingdongMallApplication {

    public static void main(String[] args) {
        SpringApplication.run(LingdongMallApplication.class, args);
    }

}

接口

public interface GoodsRepository extends JpaRepository<GoodsEntity, String> {

    @Query("select e from GoodsClassifyEntity c left join GoodsEntity e on e.id=c.goodsId " +
            "where c.classifyId=?1 and c.level=?2")
    Page<GoodsEntity> goods(String classifyId, String level, Pageable pageable);
}

调用

    public ResponseResultPage goods(String classifyId, String level, Integer page, Integer size) {
        // 分页,注意,page分页是从0开始计算的,0=第一页
        PageRequest pageRequest = PageRequest.of(page, size);
        Page<GoodsEntity> goods = goodsRepository.goods(classifyId, level, pageRequest);

        return new ResponseResultPage()
                .setPage(page)
                .setSize(size)
                .setTotal(goods.getTotalElements()) // 分页总数
                .setData(goods.getContent()); // 分页查询到内容
    }