Spring BootとThymeleafの統合、JPAと組み合わせてページング効果を実現

    このプロジェクトでは、ページングのデモンストレーション効果を実現するために、SpringBootをThymeleafフロントエンドテンプレートと組み合わせてJPAと組み合わせて作成する必要があります。それを行ったとき、いくつかの問題が見つかりました。また、インターネット上の既存のドキュメントをたくさんチェックしたところ、フルスタックの実装があまりないことがわかりました。ここでは、私のアプローチ、すべてのコード、および参照用の手順を投稿します。 。

1プロジェクトを作成し、pom.xmlを使用して依存関係を導入します

    ここでは、ThymeleafWithDBという名前のMavenが作成され、次の依存関係パッケージがpom.xmlに導入されます。

1	    <dependencies>
2	        <dependency>
3	            <groupId>org.springframework.boot</groupId>
4	            <artifactId>spring-boot-starter-web</artifactId>
5	        </dependency>
6	        <dependency>
7	            <groupId>org.springframework.boot</groupId>            
8	<artifactId>spring-boot-starter-thymeleaf</artifactId>
9	        </dependency>
10	    </dependencies>

    このプロジェクトでは、対応する在庫在庫テーブルを以下に示します。

フィールド名

の種類

説明

id

int

主キー

名前

varchar

在庫品名

1つに

int

在庫数量

説明

varchar

在庫品の説明

2スタートアップクラスを書く

   このクラスは非常に満足のいくもので、コードは次のとおりです。

1	package prj;
2	import org.springframework.boot.SpringApplication;
3	import org.springframework.boot.autoconfigure.SpringBootApplication;
4	@SpringBootApplication
5	public class SpringBootApp {
6	    public static void main(String[] args) {
7	        SpringApplication.run(SpringBootApp.class, args);
8	    }
9	}

3コントローラークラスに、ページングをサポートするメソッドを追加します

1	    @RequestMapping("/listByPage")
2	    public ModelAndView listByPage(@RequestParam(value = "pageNum", defaultValue = "0") int pageNum,
3	@RequestParam(value = "pageSize", defaultValue = "3") int pageSize) {
4	        Page<Stock> stocks=stockService.getStockListByPage(pageNum, pageSize);
5	        System.out.println("total page:" + stocks.getTotalPages());
6	        System.out.println("current Page:" + pageNum);
7	        ModelAndView modelAndView = new ModelAndView("listByPage");
8	        //传递参数
9	        modelAndView.addObject("stocks",stocks);
10	        return modelAndView;
11	    }

    2行目と3行目でメソッドのパラメーターを定義する場合、現在のページのpageNumとページあたりのデータ数を表すpageSizeパラメーターは、getパラメーターの形式でurlリクエストから取得されるため、追加する必要があります。注の前に@RequestParamを指定しないと、リクエストからこれら2つのパラメーターを取得できません。

    メソッドの4行目では、stockServiceオブジェクトのgetStockListByPageメソッドが呼び出され、ページングパラメーターが渡されたときに現在のページのデータが取得されます。同時に、デバッグのために、現在のページの情報と各ページの番号も5行目と6行目に出力されます。

    現在のページのデータを取得した後、このメソッドは9行目のメソッドを使用してそれをmodelAndViewオブジェクトに追加し、10行目でデータはこのオブジェクトを介してlistByPageビューに返されます。

4ビジネスロジックメソッドの記述

1	public Page<Stock> getStockListByPage(int pageNum, int pageSize) {
2	        Sort sort = new Sort(Sort.Direction.ASC , "ID");
3	        Pageable pageable = PageRequest.of(pageNum, pageSize, sort);
4	        Page<Stock> stocks = stockRepo.findAll(pageable);
5	        return stocks;
6	    }

    このメソッドの2行目では、Sortオブジェクトを使用して「IDによる昇順」の並べ替えメソッドを定義し、3行目のPageRequestオブジェクトを使用してページングメソッドを定義しています。開始データが定義されます。各ページに表示されるデータのpageSize値は、外部パラメーターから取得されます。

    並べ替えとページングのメソッドを決定した後、4行目で、このメソッドはPagingAndSortingRepositoryタイプのオブジェクトstockRepoのfindAllメソッドを呼び出して、パラメーターpageable Dataにカプセル化されたページングと並べ替えのメソッドに従ってMySQLストックデータテーブルを要求し、取得したデータを返します。 5行目のreturnステートメントを介して。

5レポクラスを書く

1	package prj.repo;
2	import org.springframework.data.repository.PagingAndSortingRepository;
3	import org.springframework.stereotype.Component;
4	import prj.model.Stock;
5	@Component
6	public interface StockRepo extends PagingAndSortingRepository<Stock, Integer> {  }

    6行目のコードからわかるように、RepoクラスはJPAのページング関数と並べ替え関数を含むPagingAndSortingRepositoryインターフェイスを実装しています。StockServiceで呼び出されるfindAllメソッドはJPAインターフェイスにカプセル化されているため、ここではStockRepoクラスで次のようになります。コードを書く必要さえありません。

6JPAとThymeleafの構成パラメーターをapplication.ymlファイルに書き込みます    

1	spring:
2	  jpa:
3	    show-sql: true
4	    hibernate:
5	      dll-auto: validate
6	  datasource:
7	    url: jdbc:mysql://localhost:3306/stock?serverTimezone=GMT
8	    username: root
9	    password: 123456
10	    driver-class-name: com.mysql.jdbc.Driver
11	  thymeleaf:
12	    enabled: true
13	    content-type: text/html
14	    check-template-location: true
15	    cache: false
16	    prefix: classpath:/templates/
17	    suffix: .html

    その中で、1行目から10行目までのコードには、JPAとMySQLの関連する定義が示され、11行目から17行目までのコードには、Thymeleafテンプレートのパラメーターが示されています。

    ここで使用する構成パラメーターは、前の記事で実際に説明したものですが、2行目と11行目のインデントに注意してください。yml構成ファイルのインデント形式によると、11行目のthymeleafは実際にはと同じです。 2行目。jpaは同じレベルにあり、すべて1行目のspringの子構成に属しています。

7 listByPage.htmlページを追加して、ページングの効果を実現します

    構成に応じて、ファイルをresources / templatesディレクトリに配置する必要があります。具体的なコードは次のとおりです。

1	<!DOCTYPE html>
2	<html  lang="en" xmlns:th="http://www.thymeleaf.org">
3	<head>
4	    <meta charset="UTF-8">
5	    <title>库存列表</title>
6	</head>
7	<body>
8	<table border="2">
9	    <tr>
10	        <td>库存编号</td>
11	        <td>库存货物</td>
12	        <td>数量</td>
13	        <td>描述</td>
14	    </tr>
15	    <tr th:each="stock : ${stocks}">
16	        <td th:text="${stock.ID}"></td>
17	        <td th:text="${stock.name}"></td>
18	        <td th:text="${stock.num}"></td>
19	        <td th:text="${stock.description}"></td>
20	    </tr>
21	</table>
22	<div>
23	    <ul>
24	        <li>
25	            <a th:href="'/listByPage?pageNum=0'">首页</a>
26	        </li>
27	        <li th:if="${stocks.hasPrevious()}">
28	            <a th:href="'/listByPage?pageNum=' + ${stocks.previousPageable().getPageNumber()}" th:text="上一页"></a>
29	        </li>
30	        <li th:if="${stocks.hasNext()}">
31	            <a th:href="'/listByPage?pageNum=' + ${stocks.nextPageable().getPageNumber()}" th:text="下一页"></a>
32	        </li>
33	        <li>
34	            <a th:href="'/listByPage?pageNum=' + ${stocks.getTotalPages() - 1}">尾页</a>
35	        </li>
36	    </ul>
37	</div>
38	</body>
39	</html>

    22行目から37行目までの<div>属性要素に、ページングの効果が追加されています。具体的な手順は次のとおりです。

  1. 25行目のコードで、th:href = "'/ listByPage?pageNum = 0'"コードをurlパラメーターの形式でコントローラークラスのlistByPageメソッドに渡し、pageNumが0のパラメーターを渡してホームページデータ。
  2. 「前のページ」の効果を表示する前に、stocksオブジェクトに前のページのデータが含まれているかどうかを27行目のth:ifコードで確認する必要があります。含まれている場合は、28行目のコードで「前のページ」を表示します。 「リンク、ここの「前のページ」リンクに対応するパラメータに注意してください。このリンクから前のページのデータを取得できます。
  3. 「次のページ」の表示方法は「前のページ」の表示方法と非常によく似ています。まず、th:ifを使用して次のページにデータがあるかどうかを判断し、次に次のページのデータを取得します。リンクを介して。
  4. 34行目のコードでは、最後のページのデータはコードth:href = "'/ listByPage?pageNum =' + $ {stocks.getTotalPages()-1}"を介して取得されています。ここではurlが使用されます。のパラメータ値は、最後のページのデータを取得します。

8観察効果

    書き込み後、プロジェクトを開始します。このとき、ブラウザにhttp:// localhost:8080 / listByPageと入力すると、下図のような効果が見られます。

    ご覧のとおり、上図の各ページには3つのデータがあり、データの下に対応するページングリンクが表示されています。最初のページであるため、「前のページ」へのリンクはありません。上の写真の「次のページ」リンクをクリックすると、下の写真に示すように、ページジャンプの効果を確認できます。

    これにより、ページ上のデータの変更を確認できるだけでなく、URLで、pageNumパラメーターを指定してデータの次のページが取得されることも確認できます。また、パラメータstocksにはすでに「前のページ」データが含まれているため、対応するリンクを引き続き表示できます。同様に、「ホーム」、「次へ」、「最後のページ」のリンクをクリックして、対応する効果を確認することもできます。

おすすめ

転載: blog.csdn.net/sxeric/article/details/114117184