日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

long mode 分页_在Spring Boot中使用Spring-data-jpa实现分页查询(转)

發布時間:2024/7/23 javascript 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 long mode 分页_在Spring Boot中使用Spring-data-jpa实现分页查询(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在我們平時的工作中,查詢列表在我們的系統中基本隨處可見,那么我們如何使用jpa進行多條件查詢以及查詢列表分頁呢?下面我將介紹兩種多條件查詢方式。

1、引入起步依賴

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-thymeleaf

org.springframework.boot

spring-boot-starter-data-jpa

2、對thymeleaf和jpa進行配置

打開application.yml,添加以下參數,以下配置在之前的文章中介紹過,此處不做過多說明

spring:

thymeleaf:

cache:truecheck-template-location: truecontent-type: text/html

enabled:trueencoding: utf-8mode: HTML5

prefix: classpath:/templates/suffix: .html

excluded-view-names:

template-resolver-order:

datasource:

driver-class-name: com.mysql.jdbc.Driver

url: jdbc:mysql://localhost:3306/restful?useUnicode=true&characterEncoding=UTF-8&useSSL=false

username: root

password: root

initialize:trueinit-db: truejpa:

database: mysql

show-sql: truehibernate:

ddl-auto: update

naming:

strategy: org.hibernate.cfg.ImprovedNamingStrategy

3、編寫實體Bean

@Entity

@Table(name="book")

public class Book {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

@Column(name = "id", updatable = false)

private Long id;

@Column(nullable = false,name = "name")

private String name;

@Column(nullable = false,name = "isbn")

private String isbn;

@Column(nullable = false,name = "author")

private String author;

public Book (String name,String isbn,String author){

this.name = name;

this.isbn = isbn;

this.author = author;

}

public Book(){

}

//此處省去get、set方法

}

public class BookQuery {

private String name;

private String isbn;

private String author;

//此處省去get、set方法

}

4、編寫Repository接口

@Repository("bookRepository")

public interface BookRepository extends JpaRepository

,JpaSpecificationExecutor {

}

此處繼承了兩個接口,后續會介紹為何會繼承這兩個接口

5、抽象service層

首先抽象出接口

public interface BookQueryService {

Page findBookNoCriteria(Integer page,Integer size);

Page findBookCriteria(Integer page,Integer size,BookQuery bookQuery);

}

實現接口

@Service(value="https://my.oschina.net/wangxincj/blog/bookQueryService")

public class BookQueryServiceImpl implements BookQueryService {

@Resource

BookRepository bookRepository;

@Override

public Page findBookNoCriteria(Integer page,Integer size) {

Pageable pageable = new PageRequest(page, size, Sort.Direction.ASC, "id");

return bookRepository.findAll(pageable);

}

@Override

public Page findBookCriteria(Integer page, Integer size, final BookQuery bookQuery) {

Pageable pageable = new PageRequest(page, size, Sort.Direction.ASC, "id");

Page bookPage = bookRepository.findAll(new Specification(){

@Override

public Predicate toPredicate(Root root, CriteriaQuery> query, CriteriaBuilder criteriaBuilder) {

List list = new ArrayList();

if(null!=bookQuery.getName()&&!"".equals(bookQuery.getName())){

list.add(criteriaBuilder.equal(root.get("name").as(String.class), bookQuery.getName()));

}

if(null!=bookQuery.getIsbn()&&!"".equals(bookQuery.getIsbn())){

list.add(criteriaBuilder.equal(root.get("isbn").as(String.class), bookQuery.getIsbn()));

}

if(null!=bookQuery.getAuthor()&&!"".equals(bookQuery.getAuthor())){

list.add(criteriaBuilder.equal(root.get("author").as(String.class), bookQuery.getAuthor()));

}

Predicate[] p = new Predicate[list.size()];

return criteriaBuilder.and(list.toArray(p));

}

},pageable);

return bookPage;

}

}

此處我定義了兩個接口,findBookNoCriteria是不帶查詢條件的,findBookCriteria是帶查詢條件的。在此處介紹一下上面提到的自定義Repository繼承的兩個接口,如果你的查詢列表是沒有查詢條件,只是列表展示和分頁,只需繼承JpaRepository接口即可,但是如果你的查詢列表是帶有多個查詢條件的話則需要繼承JpaSpecificationExecutor接口,這個接口里面定義的多條件查詢的方法。當然不管繼承哪個接口,當你做分頁查詢時,都是需要調用findAll方法的,這個方法是jap定義好的分頁查詢方法。

findBookCriteria方法也可以使用以下方法實現,大家可以自行選擇

@Override

public Page findBookCriteria(Integer page, Integer size, final BookQuery bookQuery) {

Pageable pageable = new PageRequest(page, size, Sort.Direction.ASC, "id");

Page bookPage = bookRepository.findAll(new Specification(){

@Override

public Predicate toPredicate(Root root, CriteriaQuery> query, CriteriaBuilder criteriaBuilder) {

Predicate p1 = criteriaBuilder.equal(root.get("name").as(String.class), bookQuery.getName());

Predicate p2 = criteriaBuilder.equal(root.get("isbn").as(String.class), bookQuery.getIsbn());

Predicate p3 = criteriaBuilder.equal(root.get("author").as(String.class), bookQuery.getAuthor());

query.where(criteriaBuilder.and(p1,p2,p3));

return query.getRestriction();

}

},pageable);

return bookPage;

}

6、編寫Controller

針對有查詢條件和無查詢條件,我們分別編寫一個Controller,默認每頁顯示5條,如下

@Controller

@RequestMapping(value = "https://my.oschina.net/queryBook")

public class BookController {

@Autowired

BookQueryService bookQueryService;

@RequestMapping("/findBookNoQuery")

public String findBookNoQuery(ModelMap modelMap,@RequestParam(value = "https://my.oschina.net/wangxincj/blog/page", defaultValue = "https://my.oschina.net/wangxincj/blog/0") Integer page,

@RequestParam(value = "https://my.oschina.net/wangxincj/blog/size", defaultValue = "https://my.oschina.net/wangxincj/blog/5") Integer size){

Page datas = bookQueryService.findBookNoCriteria(page, size);

modelMap.addAttribute("datas", datas);

return "index1";

}

@RequestMapping(value = "https://my.oschina.net/findBookQuery",method = {RequestMethod.GET,RequestMethod.POST})

public String findBookQuery(ModelMap modelMap, @RequestParam(value = "https://my.oschina.net/wangxincj/blog/page", defaultValue = "https://my.oschina.net/wangxincj/blog/0") Integer page,

@RequestParam(value = "https://my.oschina.net/wangxincj/blog/size", defaultValue = "https://my.oschina.net/wangxincj/blog/5") Integer size, BookQuery bookQuery){

Page datas = bookQueryService.findBookCriteria(page, size,bookQuery);

modelMap.addAttribute("datas", datas);

return "index2";

}

}

7、編寫頁面

首先我們編寫一個通用的分頁頁面,新建一個叫page.html的頁面

xmlns:th="http://www.thymeleaf.org"

xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"

layout:decorator="page">

  • 首頁
  • 上一頁
${pageNumber}下一頁尾頁

針對無查詢條件的接口,創建一個名為index1.html的頁面并引入之前寫好的分頁頁面,如下

Title

IDnameisbnauthor

${obj.id}${obj.name}${obj.isbn}${obj.author}

針對有查詢條件的接口,創建一個名為index2.html的頁面并引入之前寫好的分頁頁面,如下

Title name isbn author 查詢 IDnameisbnauthor
${obj.id}${obj.name}${obj.isbn}${obj.author}

ok!代碼都已經完成,我們將項目啟動起來,看一下效果。大家可以往數據庫中批量插入一些數據,訪問http://localhost:8080/queryBook/findBookNoQuery,顯示如下頁面

訪問http://localhost:8080/queryBook/findBookQuery,顯示頁面如下,可以輸入查詢條件進行帶條件的分頁查詢:

ok!以上便是一個簡單的jap分頁查詢功能的實現。

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的long mode 分页_在Spring Boot中使用Spring-data-jpa实现分页查询(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。