Web系開発メモ

Java, C#, HTML, CSS, JavaScript のことなどを書いてます。

SpringBoot アプリ開発 3.モデル・リポジトリの作成

連載記事「SpringBoot アプリ開発」を読み進めると、サンプルの Webアプリを制作することができます。

今回は、Javaのモデルとリポジトリを作成していきます。

連載記事

SpringBoot アプリ開発の連載記事は以下の通りです。

  1. 概要・使用プロダクト
  2. プロジェクト作成・SQL作成
  3. モデル・リポジトリの作成(今回の記事)
  4. コントローラー・メインの作成
  5. HTML・JavaScriptの作成
  6. CSS・画像の作成
  7. テスト・動作確認

目次

  1. モデルの作成
  2. リポジトリの作成

1. モデルの作成

つぶやきのデータを保持するクラスを作成していきます。

1.1. 親クラスの作成

事前に以下の親クラスを作成します。

src/main/java/sample/model/TimestampEntity.java

package sample.model;

import java.sql.Timestamp;
import java.time.Instant;

import jakarta.persistence.Column;
import jakarta.persistence.MappedSuperclass;
import jakarta.persistence.PrePersist;
import jakarta.persistence.PreUpdate;

@MappedSuperclass
public abstract class TimestampEntity {

  public Timestamp updateTime;

  @Column(updatable = false)
  public Timestamp createTime;

  // INSERTの時に作成日時と更新日時を設定
  @PrePersist
  public void prePersist() {
    Timestamp ts = Timestamp.from(Instant.now());
    this.createTime = ts;
    this.updateTime = ts;
  }
 
  // UPDATEの時に更新日時を設定
  @PreUpdate
  public void preUpdate() {
    this.updateTime = Timestamp.from(Instant.now());
  }
}

JPAでタイムスタンプを現在日時に設定するために用意しています。

1.2. モデルの作成

親クラスを継承するモデルを作成します。

src/main/java/sample/model/Tweet.java

package sample.model;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Version;

@Entity
public class Tweet extends TimestampEntity {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  public long id;

  @Column(nullable = false)
  public String txt;

  @Version
  @Column(nullable = false)
  public long version;
}

2. リポジトリの作成

Spring の CrudRepository を継承するインターフェイスを作成します。

src/main/java/sample/repository/TweetRepository.java

package sample.repository;

import org.springframework.data.repository.CrudRepository;

import sample.model.Tweet;

public interface TweetRepository extends CrudRepository<Tweet, Long> {
  Iterable<Tweet> findAllByOrderByCreateTimeDesc();
}

CRUD関連のメソッドは継承されるので、つぶやきを作成日時の降順で取得するメソッドだけ実装しています。

GitHubリポジトリ

アプリのコードは、以下のリポジトリにもあります。

spring-boot-tweet - GitHub

次の連載記事

4. コントローラー・メインの作成