Spring-Data-Jpa分页数据显示

创建一个springboot项目,配置文件和依赖和上篇Spring-Data-Jpa入门篇一样

和上篇一样先在项目中新建4个包,分别为entity(放置持久化类)、controller(控制器)、repository(定义数据访问接口的包)、service(业务逻辑处理类)。

1、创建持久化类

在entity包中创建一个持久化类Article.java,代码如下

//用于标记持久化类,SpringBoot项目加载后会自动根据持久化类建表
@Entity
//设置表名为tb_article
@Table(name="tb_article")
public class Article {
    /**
     * 使用@id指定主键。使用代码@GeneratedValue(strategy = GenerationType.IDENTITY)
     * 指定主键的生存策略,mysql默认为自动增长
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id; //主键
    private String title;   //名称
    private String supplier;    //作者
    private Double price;   //单价
    private String locality;    //出版社
    private int storage;        //库存
    private String image;   //商品图片
    private String description; //商品描述
    private Date createDate;    //出版时间

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getSupplier() {
        return supplier;
    }

    public void setSupplier(String supplier) {
        this.supplier = supplier;
    }

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }

    public String getLocality() {
        return locality;
    }

    public void setLocality(String locality) {
        this.locality = locality;
    }

    public int getStorage() {
        return storage;
    }

    public void setStorage(int storage) {
        this.storage = storage;
    }

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public Date getCreateDate() {
        return createDate;
    }

    public void setCreateDate(Date createDate) {
        this.createDate = createDate;
    }
}

2、定义数据访问层接口

在repository包下新建一个接口,命名为ArticleRepository,让该接口继承PagingAndSortingRepository继承,以持久化对象Article作为PagingAndSortingRepository的第一类型参数,表示当前所操作的持久化对象类型,Integer作为PagingAndSortingRepository的第二个类型参数,用于指定ID类型,完整代码如下

import com.mcy.springdatajpa.entity.Article;
import org.springframework.data.repository.PagingAndSortingRepository;

public interface ArticleRepository extends PagingAndSortingRepository<Article, Integer> {

}

PagingAndSortingRepository提供了查询所有和分页查询的方法,PagingAndSortingRepository接口的源码如下

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;

@NoRepositoryBean
public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID> {
    Iterable<T> findAll(Sort var1);    //查询所有,排序

    Page<T> findAll(Pageable var1);    //分页查询
}

在SpringBoot项目中,数据访问层无须提供实现,直接继承数据访问接口即可。

3、定义业务层类

ArticleService .java代码如下(有findAllSort排序查询所有,findAll分页查询两个方法)

import com.mcy.springdatajpa.entity.Article;
import com.mcy.springdatajpa.repository.ArticleRepository;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service
public class ArticleService {
    //数据访问层接口对象
    @Resource
    private ArticleRepository articleRepository;

    //排序查询所有
    public Iterable<Article> findAllSort(Sort sort){
        return articleRepository.findAll(sort);
    }

    //分页查询所有
    public Page<Article> findAll(Pageable page){
        return articleRepository.findAll(page);
    }
}

在业务层中需要注入数据访问层对象,在上述代码中通过@Resource注解将ArticleRepository接口对应的实现类注入进来的。

4、定义控制器

ArticleController.java代码如下(有sortArticle排序查询所有,sortPagerArticle分页排序查询两个方法)

import com.mcy.springdatajpa.entity.Article;
import com.mcy.springdatajpa.service.ArticleService;
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.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.List;

@RestController
@RequestMapping("/article")
public class ArticleController {
    //注入ArticleServer
    @Resource
    private ArticleService articleService;

    //排序查询
    @RequestMapping("/sort")
    public Iterable<Article> sortArticle(){
        //指定培训参数对象:根据id,进行降序查询
        Sort sort = Sort.by(Sort.Direction.DESC, "id");
        Iterable<Article> articleDatas = articleService.findAllSort(sort);
        return articleDatas;
    }

    //分页排序查询
    @RequestMapping("/pager")
    public List<Article> sortPagerArticle(int pageIndex){
        //指定排序参数对象:根据id,进行降序查询
        Sort sort = Sort.by(Sort.Direction.DESC, "id");
        /**
         * 封装分页实体
         * 参数1:pageIndex表示当前查询的是第几页(默认从0开始,0表示第一页)
         * 参数2:表示每页展示多少数据,现在设置每页展示2条数据
         * 参数3:封装排序对象,根据该对象的参数指定根据id降序查询
         */
        Pageable page = PageRequest.of(pageIndex - 1, 2, sort);
        //分页查询
        Page<Article> articleDatas = articleService.findAll(page);
        System.out.println("查询总页数:"+articleDatas.getTotalPages());
        System.out.println("查询总记录数:"+articleDatas.getTotalElements());
        System.out.println("查询当前第几页:"+articleDatas.getNumber()+1);
        System.out.println("查询当前页面的记录数:"+articleDatas.getNumberOfElements());
        //查询出的结果数据集合
        List<Article> articles = articleDatas.getContent();
        System.out.println("查询当前页面的集合:"+articles);
        return articles;
    }
}

 5、测试应用

启动MySQL数据库,在数据库中创建名为jpa的数据库。springboot项目启动后,JPA会在数据库中自动创建持久化类对应的tb_article表。

之后在表中添加一下数据,用于测试。

数据添加后,打开浏览器,输入http://localhost:8080/article/sort访问,请求会提交到ArticleController类中的方法sortArticle方法进行处理,该方法执行培训查询,将tb_article表中的数据以降序的方式查询出来并以JSON格式返回浏览器,如图。

测试分页查询第一页商品数据,在浏览器中输入http://localhost:8080/article/pager?pageIndex=1地址,请求会提交到ArticleController类的sortPagerArticle方法进行处理,该方法接收pageIndex参数,根据该参数确定查询第几页数据,查询到第1页数据如图。

查询第二页数据http://localhost:8080/article/pager?pageIndex=2

分页查询,控制台对应输出:

案例代码下载链接:https://github.com/machaoyin/spring-data-jpa

上一篇:Spring-Data-Jpa入门篇

下一篇:Spring-Data-Jpa条件查询

发布了112 篇原创文章 · 获赞 223 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/qq_40205116/article/details/103199478