Spring BootでDB操作のリポジトリインタフェースのプログラミング

JavaのSpring Bootで使うSpring Data JPA(JpaRepositoryやCrudRepository等のInterface)についてです。Spring Data JPAを使用したDB操作周りのリポジトリインタフェース(Repository interface)のプログラミングコードについて説明しています。

※ 本ページはプロモーションが含まれています。

このページの目的と動作環境

最終更新日:2023/9/27

JavaフレームワークのSpring Bootで、Spring Data JPAを使ったリポジトリ層のコード(DBのCRUD操作など)を色々と試したので、本記事ではその試した事をまとめています。

Spring Data JPAのJpaRepository(やCrudRepository)を継承したリポジトリインタフェース(Repository interface)を作成して、JpaRepositoryでよく使うメソッド一覧のサンプルコードを書いて説明しています。

Spring Data JPAのシンプルなサンプルコードを書いて、Spring BootのDB周りのプログラミングを早く知りたい方や、初心者・入門者にも解りやすいように説明しているので、良ければ参考にして下さい。

■Java Spring Bootで使うリポジトリとは何か?
DB周りの操作のコード部分と個人的には考えています。コントローラーやサービスクラスからリポジトリ層のリポジトリインタフェース(Repository interface)を呼び出して、DB操作をしているという感じですね。

◾️動作環境とバージョン情報です
OS:macOS Big Sur(バージョン11.7.7)
Spring Bootバージョン:3.1
Java:Java17(OpenJDK17 Eclipse Temurin(Adoptium))
開発環境:Eclipse(Pleiades All in One、Java Full Edition版)
DB:MySQL Community Server 8.0.31、MariaDB Server 10.6

このページではDBにアクセスしてCRUD操作のSQLを実行するリポジトリインターフェース(JpaRepository、CrudRepository等のInterface)の説明に集中したいので、Spring Bootプロジェクトの作成やMySQLの接続ユーザの作成、DBの作成、Spring BootとMySQLの接続設定などについては説明していません。これらについては別ページで説明しているので、良ければそちらを参考にしてください。
Spring Boot3 + MySQL(MariaDB)のウェブ開発入門

MySQL(MariaDB)のテーブルとテストデータを作成する

DBはMySQLとMariaDBのどちらでも動作する事を確認しています。

まず、今回作成するSpring Bootのリポジトリインタフェースで色々と試す用のMySQL(MariaDB)のテーブル(hoge_tbl)を作成します。

CREATE TABLE hoge_tbl(
  id INT auto_increment,
  hoge_num INT NOT NULL,
  hoge_name VARCHAR(40) NOT NULL,
  hoge_name2 VARCHAR(40),
  is_bool BOOLEAN NOT NULL,
  at_date DATE NOT NULL,
  at_datetime DATETIME NOT NULL,
  PRIMARY KEY (id)
);
hoge_tblテーブルにテスト用のレコードデータを作成します。
INSERT INTO hoge_tbl VALUES 
(1,1000,'テスト名','ほげ',true,'2022-11-12','2022-11-12 00:01:09'),
(2,2000,'テスト名2',NULL,true,'2023-01-03','2023-01-03 11:22:33'),
(3,30000,'テスト名3','ほげほげ',false,'2023-02-24','2023-02-24 03:59:38'),
(4,400000,'テスト名4',NULL,false,'2024-10-10','2024-10-10 21:00:30'),
(5,500000,'ほげ','ほげほげほげ',true,'2025-12-22','2025-12-22 23:34:15'); 
データの確認です。
> select * from hoge_tbl;
+----+----------+---------------+--------------------+---------+------------+---------------------+
| id | hoge_num | hoge_name     | hoge_name2         | is_bool | at_date    | at_datetime         |
+----+----------+---------------+--------------------+---------+------------+---------------------+
|  1 |     1000 | テスト名      | ほげ               |       1 | 2022-11-12 | 2022-11-12 00:01:09 |
|  2 |     2000 | テスト名2     | NULL               |       1 | 2023-01-03 | 2023-01-03 11:22:33 |
|  3 |    30000 | テスト名3     | ほげほげ           |       0 | 2023-02-24 | 2023-02-24 03:59:38 |
|  4 |   400000 | テスト名4     | NULL               |       0 | 2024-10-10 | 2024-10-10 21:00:30 |
|  5 |   500000 | ほげ          | ほげほげほげ       |       1 | 2025-12-22 | 2025-12-22 23:34:15 |
+----+----------+---------------+--------------------+---------+------------+---------------------+

エンティティクラスを作成する

次にJava側で、作成したhoge_tblテーブル用のエンティティクラス(HogeTbl.java)を作成します。

package com.example.demo;

import java.time.LocalDate;
import java.time.LocalDateTime;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class HogeTbl {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Integer id;
  //name属性で実際のテーブルのカラム名を指定できる
  @Column(name = "hoge_num", nullable = false)
  private Integer hogeNum;

  @Column(nullable = false)
  private String hogeName;

  private String hogeName2;

  @Column(nullable = false)
  private Boolean isBool;

  @Column(nullable = false)
  private LocalDate atDate;

  @Column(nullable = false)
  private LocalDateTime atDatetime;
}

HogeDataエンティティクラスではLombokライブラリを使っています。Lombokではアノテーションを付けるだけでセッター・ゲッター・コンストラクタなどのコードを自動で生成してくれるので、冗長なコードを書く必要がなくなりJavaコードの見た目もスッキリします。開発環境がPleiades All in OneのEclipseなら、デフォルトでLombokは入っているので使えます。もしLombokが入っていない開発環境ならLombokをインストールする必要があります。

Spring Data JPAを利用したリポジトリインタフェース(Repository interface)を作成する

次に、本題のリポジトリインタフェースです。hoge_tblテーブル用のリポジトリインタフェース(HogeTblRepository.java)を作成します。

package com.example.demo;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

//HogeTblRepository、HogeTblが同一パッケージにあるなら、HogeTblのimport文は必要はない。

@Repository
public interface HogeTblRepository extends JpaRepository<HogeTbl, Integer> {
}

ここでは、HogeTblRepositoryインタフェースを作成しただけです。@Repositoryアノテーションを付けているが、ここでは付けなくても動作します。

HogeTblRepositoryインタフェースは、Spring Data JPAのJpaRepositoryを継承しています。Spring Data JPAとは、Jakarta Persistence API(JPA)をラップ・サポートするDB周りのフレームワークで、Spring Data JPAの中ではORマッピングのHibernateを使っています。Spring Data JPAを使う事で、リポジトリ層などのDB周りのJavaプログラミング開発が簡単にできるようになります。(あと、MySQL、PostgreSQL、Oracle、MariaDB、H2などのDBの種類を意識する必要がないプログラミンができるなどのメリットや便利さがある。)

そして、Spring Data JPAのJpaRepository(やCrudRepository)を継承するインタフェースを作るだけで、基本的なDB操作を実行するメソッドを実行できるので、DBアクセスが簡単で便利です。例えば、DBに対するCRUD操作(検索してデータ取得・削除・更新・新規追加・カウント・存在確認など)ができるようになります(中の実装でSQLを実行してくれる)。これについては、このあとの「コントローラークラスを作成して、リポジトリインタフェースを使ってみる」で、具体例のサンプルコードを使って詳しく説明します。

また、JpaRepositoryを継承したHogeTblRepositoryインタフェースにメソッドを宣言追加するだけで、ちょっと複雑なDBアクセス処理(SQLの実行)をできるようになります。これについても、このあとの「リポジトリインタフェースに色々なSQLを実行するメソッドを追加する」で、具体例のサンプルコードを使って詳しく説明します。

HogeTblRepositoryはJpaRepositoryを継承していますが、JpaRepositoryでなくCrudRepositoryを継承してもある程度できます。ただ、JpaRepositoryはCrudRepositoryしているので、リポジトリインタフェースではJpaRepositoryを継承しておけば良いでしょう。

(広告)Spring BootのKindleや本をアマゾンで探す!本でSpring Bootプログラミング開発を体系的に勉強する!

コントローラークラスを作成して、リポジトリインタフェースを使ってみる

上で作ったリポジトリインタフェース(HogeTblRepository.java)を扱うコントローラークラス(HogeTblController.java)を作成します。

リポジトリインタフェース(HogeTblRepository.java)ではメソッドを1つも作成しなかったけど、このリポジトリインタフェースを使い、様々なDB操作のメソッドを実行できる事がわかります。

package com.example.demo;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

//HogeTblController、HogeTblRepository、HogeTblが同一パッケージにあるなら、import文は必要はない。

@Controller
@RequestMapping("/hoge")
public class HogeTblController {

  @Autowired
  private HogeTblRepository hogeTblRepository;

  @ResponseBody
  @GetMapping("/access-hogetbl")
  public String accessHogetbl() {
    //レコード全件を取得
    List<HogeTbl> hogeTbls = hogeTblRepository.findAll();
    //全件数を取得
    long hogeTblCount = hogeTblRepository.count();
    //主キー(プライマリーキー)のIdが1のレコードデータの存在確認だけ。
    boolean b1 = hogeTblRepository.existsById(1);
    //主キーのIdが3のレコードを取得
    Optional<HogeTbl> optHogeTbl = hogeTblRepository.findById(3);
    //
    HogeTbl hogeTbl = optHogeTbl.get();
    hogeTbl.setHogeName2(hogeTbl.getHogeName2() + "(更新)");
    //変更処理。update SQLが実行される。
    hogeTblRepository.save(hogeTbl);
    //HogeTblオブジェクトのid値はnullでいい。DBに保存する時にidはauto_incrementだから自動採番してくれる。
    HogeTbl hogeTbl2 = new HogeTbl(null, 777, "追加", "追加2", true, LocalDate.now(), LocalDateTime.now());
    //追加処理。insert SQLが実行される。
    hogeTblRepository.save(hogeTbl2);
    //主キーのIdが10のレコードを削除。レコードが存在する場合だけdelete SQLが実行される。
    hogeTblRepository.deleteById(10);

    //リポジトリ(Spring Data JPA)の説明をしたいだけなので、Thymeleafテンプレートファイル(HTML)を返さずに、ただの文字列(pタグ1つ)だけ返す。
    return "<p>hoge_tblテーブルへのアクセスして、accessHogetblメソッドの処理終了。<p>";
  }
}

HogeTblRepositoryインタフェースは1つもメソッドを宣言しなかったけど、JpaRepository(Spring Data JPA)のお陰で結構色々なメソッドが使ってSQLを実行するDB操作ができる事がわかります。上のコード以外でも、delete(),deleteAll(),saveAll()なども使えます。

動作確認をしたい場合、Spring Bootアプリを起動して「http://localhost:8080/hoge/access-hogetbl 」にブラウザかcurlでアクセスすれば、HogeTblControllerコントローラークラスのaccessHogetbl()メソッドが実行されるので動作確認できます。

Eclipseで通常起動ではなくデバッグ起動すれば、リポジトリインターフェース(HogeTblRepository)の各メソッドを実行した時の戻り値の変数結果からDBアクセスの取得結果が分かりますし、SQLログを出力するように設定していれば、どんなSQLが実行されたかも分かるので理解が早いと思います。

DB連携したSpring BootのSQLログ出力設定については別ページで説明しているので、そちらを参考にしてください。
設定ファイルapplication.propertiesで、Spring BootとMySQL(MariaDB)の接続設定、SQLログ出力設定をする

リポジトリインタフェースに色々なSQLを実行するメソッドを追加する

次に、上で作成したリポジトリインタフェースのHogeTblRepository.javaに、MySQLのhoge_tblテーブルに対して色々なSQLを実行するメソッドの宣言を追加していきます。

package com.example.demo;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

//HogeTblRepository、HogeTblが同一パッケージにあるなら、HogeTblのimport文は必要はない。

public interface HogeTblRepository extends JpaRepository<HogeTbl, Integer> {
  /*
   * hoge_nameカラムで検索。where hoge_name = ?
   * 戻り値の型はList<HogeTbl>だけでなく、Iterable<HogeTbl>、Collection<HogeTbl>でも大丈夫だが、継承しているインタフェースのメソッド宣言(findAllとか)に合わせた方がいいよね。
   */
  List<HogeTbl> findByHogeName(String hogeName);
  //Iterable<HogeTbl> findByHogeName(String hogeName);
  //Collection<HogeTbl> findByHogeName(String hogeName);

  //hoge_name2カラムで検索。where hoge_name2 = ?
  List<HogeTbl> findByHogeName2(String hogeName2);

  //hoge_name2カラムがNULLのレコードを取得。where hoge_name2 is null
  List<HogeTbl> findByHogeName2IsNull();

  //hoge_name2カラムがNULLでないレコードを取得。where hoge_name2 is not null
  List<HogeTbl> findByHogeName2IsNotNull();

  //datetime型のat_datetimeカラムで日時検索。where at_datetime=?
  List<HogeTbl> findByAtDatetime(LocalDateTime ldt);

  //at_datetimeカラムで日時検索。引数の日時より過去のレコード。 where at_datetime < ?
  List<HogeTbl> findByAtDatetimeBefore(LocalDateTime ld);

  //at_datetimeカラムで日時検索。引数の日時より未来のレコード。 where at_datetime > ?
  List<HogeTbl> findByAtDatetimeAfter(LocalDateTime ld);

  //at_datetimeカラムで日時検索。引数の日時以外のレコード。where at_datetime != ?
  List<HogeTbl> findByAtDatetimeNot(LocalDateTime ld);

  //date型のat_dateカラムで日付(年月日)検索。where at_date=?; at_datetimeカラムの日時検索と同じで、引数と比較して過去、未来のレコードを取得するメソッドも作れる。
  List<HogeTbl> findByAtDate(LocalDate ld);

  //In演算子。hoge_nameカラムで範囲検索。or演算子でも代用できる。where hoge_name in (? , ? , ・・・)
  List<HogeTbl> findByHogeNameIn(Iterable<String> hogeNames);

  //hoge_nameカラムでlike演算子(部分一致検索、曖昧検索)。 where hoge_name like ?
  List<HogeTbl> findByHogeNameLike(String hogeName);

  //hoge_nameカラムでnot like検索。where hoge_name not like ?
  List<HogeTbl> findByHogeNameNotLike(String hogeName);

  //hoge_nameカラムで引数hogeNameを含むレコードを検索。たぶんだけどMySQLにはcontain,contains句は無い。実際に実行されるSQLはlike演算子。where hoge_name like "%hogeName%"
  List<HogeTbl> findByHogeNameContaining(String hogeName);

  //hoge_nameカラムで引数hogeNameで始まるレコードを検索。たぶんだけどMySQLにはstarting with,start with句は無い。実際に実行されるSQLはlike演算子。
  List<HogeTbl> findByHogeNameStartingWith(String hogeName);

  //hoge_nameカラムで引数hogeNameで終わるレコードを検索。たぶんだけどMySQLにはending with,end with句は無い。実際に実行されるSQLはlike演算子。
  List<HogeTbl> findByHogeNameEndingWith(String hogeName);

  //Boolean型(MySQLのtinyint(1)型)カラムで検索
  //is_boolカラムで検索。where is_bool=?
  List<HogeTbl> findByIsBool(Boolean isBool);

  //is_boolカラムがtrueのレコードを検索。where is_bool
  List<HogeTbl> findByIsBoolTrue();

  //is_boolカラムがfalseのレコードを検索。where not(is_bool)
  List<HogeTbl> findByIsBoolFalse();

  //数値型カラムで検索
  //引数hogeNumより大きい。where hoge_num>?
  List<HogeTbl> findByHogeNumGreaterThan(Integer hogeNum);

  //引数hogeNum以上。where hoge_num>=?
  List<HogeTbl> findByHogeNumGreaterThanEqual(Integer hogeNum);

  //引数hogeNum未満。where hoge_num<?
  List<HogeTbl> findByHogeNumLessThan(Integer hogeNum);

  //引数hogeNum以下。where hoge_num<=?
  List<HogeTbl> findByHogeNumLessThanEqual(Integer hogeNum);

  //数値型カラムの範囲検索。between ~ and ~ 演算子。where hoge_num between ? and ?
  List<HogeTbl> findByHogeNumBetween(Integer start, Integer end);

  /*
   * hoge_numカラムでソート検索。昇順(ASC)。ORDER BY ASC。order by hoge_num asc、findAll~とfind~は同じ。どちらも同じSQLを実行してくれる。
   * findAllOrderByHogeNum()とfindOrderByHogeNum()というメソッド名だとダメだった。コンパイルエラーはないが起動時ランタイムエラーが発生する。名前的にちょっと分かりづらいが仕方ない。
   * 「Caused by: java.lang.IllegalStateException: Method public abstract java.util.List」
   */
  List<HogeTbl> findAllByOrderByHogeNum();
  List<HogeTbl> findByOrderByHogeNum();

  //hoge_numカラムでソート検索。降順(DESC)。ORDER BY DESC、order by hoge_num desc
  List<HogeTbl> findByOrderByHogeNumDesc();
  List<HogeTbl> findAllByOrderByHogeNumDesc();

  //ソートした検索結果の先頭1レコードだけ取得。limit演算子。1レコードだから戻り値はOptionalで受けるようにする。FirstじゃなくてTopでもいい。order by hoge_num desc limit ?
  Optional<HogeTbl> findFirstByOrderByHogeNumDesc();

  //ソートした検索結果の先頭から10レコード分を取得。order by hoge_num desc limit ?
  List<HogeTbl> findFirst10ByOrderByHogeNumDesc();

  //SQLのAND検索。hoge_nameカラムとis_boolカラムでAND検索。where hoge_name=? and is_bool=?
  List<HogeTbl> findByHogeNameAndIsBool(String hogeName, Boolean isBool);

  //SQLのOR検索。hoge_nameカラムとhoge_name2カラムでOR検索。where hoge_name=? or hoge_name2=?
  List<HogeTbl> findByHogeNameOrHogeName2(String hogeName, String hogeName2);

  //hoge_nameカラムで検索した結果のカウント。select count ~ where hoge_name=?; カウント系のSQLは、countBy以外でもexistsBy~、deleteBy~なども簡単に作れる。
  long countByHogeName(String hogeName);

  //hoge_nameカラムでlike検索した結果のカウント。select count ~ where hoge_name like ?
  long countByHogeNameLike(String hogeName);

  //ネイティブSQL。自分で指定したSQLを実行する。メソッド名は規則はなく自由でいい。ただもちろんわかりやすいメソッド名にすべきだけど。
  //実行するSQL:SELECT * FROM hoge_tbl WHERE hoge_num = ? OR hoge_name = ?
  @Query(value = "SELECT * FROM hoge_tbl WHERE hoge_num = :hogeNum OR hoge_name = :hogeName", nativeQuery = true)
  List<HogeTbl> nativeQueryFindByHogeNumOrHogeNameTekito(@Param("hogeNum") Integer hogeNum, @Param("hogeName") String hogeName);
}

JpaRepository(Spring Data JPA)を色々と試すために、結構メソッドを追加してみました。宣言するメソッド名は、DBテーブルのカラム名などに合わせる必要があります。各メソッドのコメント文で何をしているかの簡単な説明をしているので参考にしてください。

ここでのポイントは、JpaRepositoryを継承したHogeTblRepositoryリポジトリインタフェースにメソッドを宣言・追加しただけで、Spring Data JPAが内部でメソッドの実装を自動でしてくれるという事です。プログラマ側でDB操作をする為の実装コードをプログラミングする必要が無いので、とても便利で簡単です。

また、宣言するメソッド名で実行したいSQLを決めるのではなく、直接実行したいSQLを書きたい場合、HogeTblRepositoryのコードの最後にある@Queryアノテーションを使えばできます。

コントローラークラスを編集して、リポジトリインタフェースに追加したメソッドを使ってみる

コントローラークラス(HogeTblController.java)に新しいaccessHogetbl2()メソッドを追加して、そのメソッドでリポジトリインタフェース(HogeTblRepository.java)に追加したメソッドを呼び出して使ってみます。
(*accessHogetbl2()メソッドのコードだけ書くので、HogeTblController.javaに追加してください。)

@ResponseBody
@GetMapping("/access-hogetbl2")
public String accessHogetbl2() {
  //hoge_nameカラムで検索
  List<HogeTbl> hogeTbls = hogeTblRepository.findByHogeName("テスト名");
  //hoge_name2カラムがNULLのレコードを検索
  List<HogeTbl> hogeTbls2 = hogeTblRepository.findByHogeName2IsNull();
  //hoge_name2カラムがNULLでないレコードを検索
  List<HogeTbl> hogeTbls3 = hogeTblRepository.findByHogeName2IsNotNull();

  //日時検索(datetime型)
  List<HogeTbl> hogeTbls4 = hogeTblRepository.findByAtDatetime(LocalDateTime.now());
  List<HogeTbl> hogeTbls5 = hogeTblRepository.findByAtDatetimeBefore(LocalDateTime.now());
  List<HogeTbl> hogeTbls6 = hogeTblRepository.findByAtDatetimeAfter(LocalDateTime.now());
  List<HogeTbl> hogeTbls7 = hogeTblRepository.findByAtDatetimeNot(LocalDateTime.now());

  //日付(年月日)検索(date型)
  List<HogeTbl> hogeTbls8 = hogeTblRepository.findByAtDate(LocalDate.now());

  //hoge_nameカラムでIn演算子で検索
  List<HogeTbl> hogeTbls9 = hogeTblRepository.findByHogeNameIn(List.of("テスト名", "テスト名3", "ほげ"));

  //like, not like演算子で部分一致検索
  //hoge_nameカラムで"テスト名"で始まるレコードを検索
  List<HogeTbl> hogeTbls10 = hogeTblRepository.findByHogeNameLike("テスト名%");
  //hoge_nameカラムで"テスト名"以外で始まるレコードを検索
  List<HogeTbl> hogeTbls11 = hogeTblRepository.findByHogeNameNotLike("テスト名%");
  //hoge_nameカラムで"テスト名"を含むレコードを検索
  List<HogeTbl> hogeTbls12 = hogeTblRepository.findByHogeNameContaining("テスト名");
  //hoge_nameカラムで"テスト名"で始まるレコードを検索。hogeTblRepository.findByHogeNameLike("テスト名%");と同じ。
  List<HogeTbl> hogeTbls13 = hogeTblRepository.findByHogeNameStartingWith("テスト名");
  //hoge_nameカラムで"テスト名"で終わるレコードを検索。これはhogeTblRepository.findByHogeNameEndingWith("%テスト名");と同じ。
  List<HogeTbl> hogeTbls14 = hogeTblRepository.findByHogeNameEndingWith("テスト名");

  //is_boolカラムで検索。Boolean型(MySQLのtinyint(1)型)の検索
  List<HogeTbl> hogeTbls15 = hogeTblRepository.findByIsBool(false);
  List<HogeTbl> hogeTbls16 = hogeTblRepository.findByIsBoolTrue();
  List<HogeTbl> hogeTbls17 = hogeTblRepository.findByIsBoolFalse();

  //数値型の検索
  //hoge_numカラムが10000より大きいレコードを検索
  List<HogeTbl> hogeTbls18 = hogeTblRepository.findByHogeNumGreaterThan(10000);
  //hoge_numカラムが10000以上のレコードを検索
  List<HogeTbl> hogeTbls19 = hogeTblRepository.findByHogeNumGreaterThanEqual(10000);
  //hoge_numカラムが10000未満のレコードを検索
  List<HogeTbl> hogeTbls20 = hogeTblRepository.findByHogeNumLessThan(10000);
  //hoge_numカラムが10000以下のレコードを検索
  List<HogeTbl> hogeTbls21 = hogeTblRepository.findByHogeNumLessThanEqual(10000);
  //hoge_numカラムが10000以上1000000以下のレコードを検索。between ~ and ~
  List<HogeTbl> hogeTbls22 = hogeTblRepository.findByHogeNumBetween(10000, 1000000);

  //ソート
  //hoge_numカラムでソート検索。昇順(ASC)
  List<HogeTbl> hogeTbls23 = hogeTblRepository.findAllByOrderByHogeNum();
  List<HogeTbl> hogeTbls24 = hogeTblRepository.findByOrderByHogeNum();
  //hoge_numカラムでソート検索。降順(DESC)
  List<HogeTbl> hogeTbls25 = hogeTblRepository.findByOrderByHogeNumDesc();
  List<HogeTbl> hogeTbls26 = hogeTblRepository.findAllByOrderByHogeNumDesc();

  //hoge_numカラムでソート(DESC)検索して、先頭レコードだけ取得。limit演算子
  Optional<HogeTbl> hogeTbl27 = hogeTblRepository.findFirstByOrderByHogeNumDesc();
  //hoge_numカラムでソート(DESC)検索して、先頭から 10レコードだけ取得
  List<HogeTbl> hogeTbls28 = hogeTblRepository.findFirst10ByOrderByHogeNumDesc();

  //AND検索。hoge_numカラムとis_boolカラムのAND検索
  List<HogeTbl> hogeTbls29 = hogeTblRepository.findByHogeNameAndIsBool("テスト名", true);
  //OR検索。hoge_numカラムとhoge_num2カラムのOR検索
  List<HogeTbl> hogeTbls30 = hogeTblRepository.findByHogeNameOrHogeName2("テスト名4","ほげほげ");

  //hoge_numカラムで条件指定してカウント数(検索結果数)を取得。
  long hogeTblsCount = hogeTblRepository.countByHogeName("テスト名");
  //hoge_numカラムで条件指定(like演算子)してカウント数を取得。
  long hogeTblsCount3 = hogeTblRepository.countByHogeNameLike("テスト名%");

  //ネイティブクエリ。自分で実行したいSQLをリポジトリインタフェースのメソッドの@Queryアノテーションに書いて実行する。
  Iterable<HogeTbl> hogeTbls31 = hogeTblRepository.nativeQueryFindByHogeNumOrHogeNameTekito(2000, "テスト名4");

  return "<p>hoge_tblテーブルへのアクセスして、accessHogetbl2()メソッドの処理終了。<p>";
}

コードの詳細についてはコメント文を参考にしてください。ただ、実際に動作確認した方が理解が早いと思います。Spring Bootを起動して「http://localhost:8080/hoge/access-hogetbl2 」にアクセスすれば、accessHogetbl2()メソッドを実行する事ができます。

(広告)Amazonでパソコン・周辺機器を探す!パソコン開発環境を快適に!