PagingAndSortingRepository接口实战

一 pom

<project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0  http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <groupId>org.fkit</groupId>
     <artifactId>pagingandsortingrepositorytest</artifactId>
     <version>0.0.1-SNAPSHOT</version>
     <packaging>jar</packaging>
     <name>pagingandsortingrepositorytest</name>
     <url>http://maven.apache.org</url>
     <!-- spring-boot-starter-parent是Spring Boot的核心启动器,  包含了自动配置、日志和YAML等大量默认的配置,大大简化了我们的开发。
           引入之后相关的starter引入就不需要添加version配置, spring  boot会自动选择最合适的版本进行添加。 -->
     <parent>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-parent</artifactId>
           <version>2.0.0.RELEASE</version>
           <relativePath />
     </parent>
     <properties>
           <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
           <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
           <java.version>1.8</java.version>
     </properties>
     <dependencies>
           <!-- 添加spring-boot-starter-web模块依赖 -->
           <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
           </dependency>
           <!-- 添加spring-boot-starter-thymeleaf模块依赖 -->
           <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-thymeleaf</artifactId>
           </dependency>
           <!-- 添加MySQL依赖 -->
           <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
           </dependency>
           <!-- 添加Spring Data JPA依赖 -->
           <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
           </dependency>
           <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <scope>test</scope>
           </dependency>
     </dependencies>
</project>

二 运行类

package org.fkit.pagingandsortingrepositorytest;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;


@SpringBootApplication
public class App
{
    public static void main( String[] args )
    {
        // SpringApplication 用于从main方法启动Spring应用的类。
        SpringApplication.run(App.class, args);
    }
}

三 持久化类

package org.fkit.pagingandsortingrepositorytest.bean;


import java.io.Serializable;
import java.util.Date;


import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;


/**
*  商品对象
* */
@Entity
@Table(name="tb_article")
public class Article implements Serializable{


    private static final long serialVersionUID = 1L;
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String title;
    private String supplier;
    private Double price;
    private String locality;
    private Date putawayDate;
    private int storage;
    private String image;
    private String description;
    private Date createDate;
    public int getId() {
        return id;
    }
    public void setId(int 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 Date getPutawayDate() {
        return putawayDate;
    }
    public void setPutawayDate(Date putawayDate) {
        this.putawayDate = putawayDate;
    }
    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;
    }
}

四 控制器

package org.fkit.pagingandsortingrepositorytest.controller;


import java.util.List;
import javax.annotation.Resource;
import org.fkit.pagingandsortingrepositorytest.bean.Article;
import org.fkit.pagingandsortingrepositorytest.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.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


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


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


    @RequestMapping("/pager")
    public List<Article> sortPagerArticle(int pageIndex) {
        // 指定排序参数对象:根据id,进行降序查询
        Sort sort = new Sort(Sort.Direction.DESC, "id");
        /**
         * 封装分页实体 参数一:pageIndex表示当前查询的第几页(默认从0开始,0表示第一页) 参数二:表示每页展示多少数据,现在设置每页展示2条数据
         * 参数三:封装排序对象,根据该对象的参数指定根据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;
    }
}

五 Service层

package org.fkit.pagingandsortingrepositorytest.service;

import javax.annotation.Resource;

import org.fkit.pagingandsortingrepositorytest.bean.Article;
import org.fkit.pagingandsortingrepositorytest.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;


@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);
    }
}

六 Repository层

package org.fkit.pagingandsortingrepositorytest.repository;

import org.fkit.pagingandsortingrepositorytest.bean.Article;
import org.springframework.data.repository.PagingAndSortingRepository;

public interface ArticleRepository extends PagingAndSortingRepository<Article, Integer> {
}

七 数据库

INSERT INTO tb_article (
  TITLE,
  SUPPLIER,
  PRICE,
  LOCALITY,
  PUTAWAY_DATE,
  STORAGE,
  IMAGE,
  DESCRIPTION,
  CREATE_DATE
)
VALUES
  (
    '疯狂Java讲义(附光盘)。',
    '李刚 著',
    108.8,
    '电子工业出版社',
    NULL,
    100,
    'java.jpg',
    '疯狂源自梦想,技术成就辉煌 本书来自作者3年的Java培训经历,凝结了作者近3000个小时的授课经验,总结了几百个Java学员学习过程中的典型错误。',
    '2008-10-01'
  ),
  (
    '轻量级Java EE企业应用实战。',
    '李刚 著',
    79.8,
    '电子工业出版社',
    NULL,
    100,
    'ee.jpg',
    '本书主要介绍以Spring+Hibernate为基础的Java EE应用。',
    '2008-11-01'
  ),
  (
    '疯狂Ajax讲义(含CD光盘1张)。',
    '李刚 著',
    66.6,
    '电子工业出版社',
    NULL,
    100,
    'ajax.jpg',
    '异步访问技术,现在所有网站都在用。',
    '2011-07-01'
  ),
  (
    '疯狂iOS讲义(基础篇)(含光盘1张)',
    '李刚 著',
    85.6,
    '电子工业出版社',
    NULL,
    100,
    'ios.jpg',
    '基于iOS全新版本彻底升级,Swift和Objective-C双语讲解。',
    '2016-05-01'
  ),
  (
    '魔戒:插图珍藏版(200套限量编号版随机发送!)。奴役全世界的力量。',
    '(英国) J.R.R.托尔金 著',
    132.3,
    '译林出版社',
    NULL,
    100,
    '22566493-1_b.jpg',
    '天真无邪的哈比男孩佛罗多继承了一枚戒,这是一次异常艰险的远征……',
    '2012-06-18'
  ),
  (
    '肖申克的救赎。',
    '(美)金 著,施寄青,赵永芬,齐若兰',
    19.9,
    '人民文学出版社',
    NULL,
    100,
    '9198692-1_l.jpg',
    '本书是斯蒂芬•金最为人精精乐道的杰出代表作。',
    '2012-06-11'
  ),
  (
    '权威定本四大名著: 红楼梦 三国演义  水浒传  西游记 全国独家',
    '[明] 吴承恩,[明] 施耐庵,[明] 罗贯中,[清] 曹雪芹 著;黄肃秋 注',
    145.8,
    '清华大学出版社',
    NULL,
    100,
    '20605371-1_a.jpg',
    '权威定本四大名著: 红楼梦 三国演义  水浒传  西游记。',
    '2012-06-11'
  ) ,
  (
    '万物生光辉',
    '[英] 吉米·哈利 著;余国芳,谢瑶玲 译',
    23.6,
    '湖北教育出版社',
    NULL,
    100,
    '22639083-1_a.jpg',
    '邂逅最可爱的动物,感受最纯真的幽默。',
    '2012-06-11'
  ),
  (
    '爱你是最好的时光',
    '匪我思存 著 ',
    17.6,
    '译林出版社',
    NULL,
    100,
    '22630101-1_a.jpg',
    '终极大结局完结篇。',
    '2012-06-11'
  ),
  (
    '白鹿原',
    '陈忠实 著',
    360,
    '春风文艺出版社',
    NULL,
    100,
    '22541642-1_a.jpg',
    '中国首部当代名家名篇宣纸线装书,陈忠实先生亲笔签名签章限量珍藏版。',
    '2012-06-11'
  ),
(
    'Spring+MyBatis企业应用实战。',
    '肖文吉 著',
    58,
    '电子工业出版社',
    NULL,
    100,
    'Spring+MyBatis.jpg',
    '媲美于SSH组合的轻量级Java EE开发方式。',
    '2017-01-01'
  ),
  (
    '疯狂XML讲义(含光盘1张),包括DTD、Schema等技术的深入讲解。',
    '李刚 著',
    48.8,
    '电子工业出版社',
    NULL,
    100,
    'xml.jpg',
    '本书主要以XML为核心,深入地介绍了XML的各种相关知识。',
    '2012-06-11'
  ),
  (
    '疯狂Java:突破程序员基本功的16课(修订版)',
    '李刚 著',
    44.2,
    '电子工业出版社',
    NULL,
    100,
    'basic.jpg',
    '《疯狂Java:突破程序员基本功的16课(修订版)》',
    '2012-06-11'
  ),
  (
    '疯狂Android讲义(含CD光盘1张)',
    '李刚 著',
    60.6,
    '电子工业出版社',
    NULL,
    100,
    'android.jpg',
    '本书全面地介绍了Android应用开发的相关知识。',
    '2012-06-11'
  );

八 测试

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值