[JAVA] [Spring Boot] Einfaches Rezept für den Paging-Prozess

Umgebung

Sprache: Java 1.8 Framework: Spring Boot 2.2.4.RELEASE (Spring-Boot-Starter) Template Engine: Thymeleaf 2.2.4.RELEASE (Spring-Boot-Starter) Datenbank: H2 1.4.200 (Spring-Boot-Starter) orm : data-jpa 2.2.4.RELEASE (spring-boot-starter)

Quellcode

Entity

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

@Entity
public class Board {

	@Id @GeneratedValue
	private String id;
	
	private String title;
	
	private String user; 
	
    //Getter / Setter weggelassen
    
}

Pagination

public class Pagination {

	/** 1.Anzahl der Bulletins, die auf der Seite angezeigt werden sollen**/
	private int pageSize = 10;

	/** 2.Anzahl der ausgelagerten Blöcke**/
	private int blockSize = 10;

	/** 3.Aktuelle Seite**/
	private int page = 1;

	/** 4.Derzeit gesperrt**/
	private int block = 1;

	/** 5.Gesamtzahl der Bulletins**/
	private int totalListCnt;

	/** 6.Gesamtzahl der Seiten**/
	private int totalPageCnt;

	/** 7.Gesamtzahl der Blöcke**/
	private int totalBlockCnt;

	/** 8.Startseite blockieren**/
	private int startPage = 1;

	/** 9.Letzte Seite des Blocks**/
	private int endPage = 1;

	/** 10.DB Approach Start Index**/
	private int startIndex = 0;

	/** 11.Letzte Seite des vorherigen Blocks**/
	private int prevBlock;

	/** 12.Letzte Seite des nächsten Blocks**/
	private int nextBlock;
    
    //Getter / Setter weggelassen

	public Pagination(int totalListCnt, int page) {

		//Rufen Sie die Gesamtzahl der Beiträge und die aktuelle Seite vom Controller ab.
		//Gesamtzahl der Bulletins- totalListCnt
		//Aktuelle Seite- page
		
		/** 3.Aktuelle Seite**/
		setPage(page);
		
		/** 5.Gesamtzahl der Bulletins**/
		setTotalListCnt(totalListCnt);

		/** 6.Gesamtzahl der Seiten**/
		setTotalPageCnt((int) Math.ceil(totalListCnt * 1.0 / pageSize));

		/** 7.Gesamtzahl der Blöcke**/
		setTotalBlockCnt((int) Math.ceil(totalPageCnt * 1.0 / blockSize));
		
		/** 4.Derzeit gesperrt**/
		setBlock((int) Math.ceil((page * 1.0)/blockSize)); 

		/** 8.Startseite blockieren**/
		setStartPage((block - 1) * blockSize + 1);
		
		/** 9.Letzte Seite des Blocks**/
		setEndPage(startPage + blockSize - 1);
        
		/* ===Variationen auf der letzten schwarzen Seite===*/
		if(endPage > totalPageCnt){this.endPage = totalPageCnt;}
		
		/** 11.Letzte Seite des vorherigen Blocks**/
		setPrevBlock((block * blockSize) - blockSize);

		/* ===Variationen der vorherigen Blöcke=== */
		if(prevBlock < 1) {this.prevBlock = 1;}

		/** 12.Letzte Seite des nächsten Blocks**/
		setNextBlock((block * blockSize) + 1);
		
		/* ===Variationen im nächsten Block===*/
		if(nextBlock > totalPageCnt) {nextBlock = totalPageCnt;}
        
		/** 10.DB Approach Start Index**/
		setStartIndex((page-1) * pageSize);
	
	}
}

Controller

@GetMapping("/")
public String home(Model model, @RequestParam(defaultValue = "1") int page) {

    //Gesamtzahl der Bulletins
    int totalListCnt = boardRepository.findAllCnt();

    //Gesamtzahl der Beiträge und aktuelle Seite
    Pagination pagination = new Pagination(totalListCnt, page);

    //DB Approach Start Index
    int startIndex = pagination.getStartIndex();
    
    //Maximale Anzahl von Bulletins, die auf einer Seite angezeigt werden sollen
    int pageSize = pagination.getPageSize();

	//Bulletin-Erwerb
    List<Board> boardList = boardRepository.findListPaging(startIndex, pageSize);

	//Objekt im Modellobjekt speichern
    model.addAttribute("boardList", boardList);
    model.addAttribute("pagination", pagination);

    return "index";
}

Repository

@Repository
public class BoardRepository {

	@PersistenceContext
	private EntityManager em;

	public int findAllCnt() {
		return ((Number) em.createQuery("select count(*) from Board")
					.getSingleResult()).intValue();
	}

	public List<Board> findListPaging(int startIndex, int pageSize) {
		return em.createQuery("select b from Board b", Board.class)
					.setFirstResult(startIndex)
					.setMaxResults(pageSize)
					.getResultList();
	}
}

html

<!DOCTYPE html>
<html 	lang="ja" 
        xmlns="http://www.w3.org/1999/xhtml" 
        xmlns:th="http://www.thymeleaf.org">
			
<head>
	<meta charset="UTF-8">
	<title>paging</title>
		<link rel="stylesheet" th:href="@{/css/bootstrap.min.css}">
	</head>
<body>
 
<table class="table table-striped">

  <thead class="thead-dark">
    <tr>
      <th scope="col" style="width: 10%">no</th>
      <th scope="col">title</th>
      <th scope="col" style="width: 15%">user</th>
    </tr>
  </thead>
  
  <tbody>
    <tr th:each="board : ${boardList}">
      <th scope="row" th:text="${boardStat.index + 1}">1</th>
      <td th:text="${board.title}"></td>
      <td th:text="${board.user}"></td>
    </tr>
  </tbody>
  
</table>

//Paging
<nav aria-label="Page navigation example ">
  <ul class="pagination">
  <li class="page-item">
      <a class="page-link" th:href="@{/?page=1}" aria-label="Previous">
        <span aria-hidden="true"><<</span>
      </a>
    </li>
    <li class="page-item">
      <a class="page-link" th:href="@{/?page={page} (page = ${pagination.prevBlock})}" aria-label="Previous">
        <span aria-hidden="true"><</span>
      </a>
    </li>
    <th:block  th:with="start = ${pagination.startPage}, end = ${pagination.endPage}">
	    <li class="page-item" 
	    		 th:with="start = ${pagination.startPage}, end = ${pagination.endPage}"
	    		th:each="pageButton : ${#numbers.sequence(start, end)}">
	    		<a class="page-link" th:href="@{/?page={page} (page = ${pageButton})}" th:text=${pageButton}></a>
	    </li>
    </th:block>
    <li class="page-item">
      <a class="page-link" th:href="@{?page={page} (page = ${pagination.nextBlock})}" aria-label="Next">
        <span aria-hidden="true">></span>
      </a>
    </li>
    <li class="page-item">
      <a class="page-link" th:href="@{?page={page} (page = ${pagination.totalPageCnt})}" aria-label="Previous">
        <span aria-hidden="true">>></span>
      </a>
    </li>
  </ul>
</nav>

</body>
</html>

Bemerkungen

Recommended Posts

[Spring Boot] Einfaches Rezept für den Paging-Prozess
Fordern Sie Spring Boot heraus
Spring Boot Form
Implementieren Sie die Paging-Funktion mit Spring Boot + Thymeleaf
Spring Boot Denken Sie daran
gae + frühlingsstiefel
SPRING BOOT Lernaufzeichnung 01
Frühlingsstiefel + Heroku Postgres
Erster Frühlingsstiefel (DI)
SPRING BOOT Lernprotokoll 02
Spring Boot2 Spickzettel
Spring Boot-Ausnahmebehandlung
Spring Boot Servlet-Zuordnung
Spring Boot Entwicklung-Entwicklungsumgebung-
Spring Boot-Lernverfahren
Spring Boot lernen [Anfang]
Schreiben von Spring Boot-Memos (2)
Spring Boot 2.2 Dokumentzusammenfassung
[Spring Boot] DataSourceProperties $ DataSourceBeanCreationException
Spring Boot 2.3 Verfügbarkeit von Anwendungen
Spring Boot Tutorials Themen
Mit Spring Boot herunterladen
[Spring Boot] Umgebungskonstruktion (macOS)
Legen Sie den Kontextparameter in Spring Boot fest
Versuchen Sie Spring Boot von 0 bis 100.
Generieren Sie mit Spring Boot einen Barcode
Hallo Welt mit Spring Boot
Spring Boot unter Microsoft Azure
Implementieren Sie GraphQL mit Spring Boot
Aufgabenplan für das Spring Boot Tutorial
Spring 5 & Spring Boot 2 Praktisches Vorbereitungsverfahren
Hallo Welt mit Spring Boot!
Spring Boot 2 Multiprojekt mit Gradle
[Spring Boot] Erstellung von Webanwendungen
Führen Sie LIFF mit Spring Boot aus
SNS-Login mit Spring Boot
Spring Boot Hot Swapping-Einstellungen
[Java] Thymeleaf Basic (Spring Boot)
Einführung in Spring Boot ~ ~ DI ~
Datei-Upload mit Spring Boot
Spring Boot beginnt mit dem Kopieren
Einführung in Spring Boot ② ~ AOP ~
CICS-Java-Anwendung ausführen- (4) Spring Boot-App
Spring Boot beginnend mit Docker
Spring Boot + Springfox Springfox-Boot-Starter 3.0.0 Verwendung
Tipps zur Spring Boot DB
Hallo Welt mit Spring Boot
Setzen Sie Cookies mit Spring Boot
Verwenden Sie Spring JDBC mit Spring Boot
Aufbau der Docker x Spring Boot-Umgebung
Wichtige Änderungen in Spring Boot 1.5
Modul mit Spring Boot hinzufügen
Erste Schritte mit Spring Boot
NoHttpResponseException in Spring Boot + WireMock
[Spring Boot] Senden Sie eine E-Mail
Einstellungen für die Spring Boot-Leistung
Einführung in Spring Boot Teil 1
Spring Boot Externe Einstellungspriorität
Versuchen Sie es mit Spring Boot Security
[Java] [Spring] Spring Boot 1.4-> 1.2 Downgrade Hinweis