連載記事「SpringBoot アプリ開発」を読み進めると、サンプルの Webアプリを制作することができます。
連載記事
SpringBoot アプリ開発の連載記事は以下の通りです。
- 概要・使用プロダクト
- プロジェクト作成・SQL作成
- モデル・リポジトリの作成(今回の記事)
- コントローラー・メインの作成
- HTML・JavaScriptの作成
- CSS・画像の作成
- テスト・動作確認
目次
- モデルの作成
- リポジトリの作成
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リポジトリ
アプリのコードは、以下のリポジトリにもあります。