SpringでJPA
JPAはDBとのやりとりを簡単にしてくれる。
クエリメソッドでSQLを自動生成。
SpringBoot + JPA + Thymeleafで簡単なCRUDを作る②~画面と機能作成まで~ https://qiita.com/ozaki25/items/3b348874b6db5ab4f04f
DB側で必要な設定は↓ 参考:@GeneratedValueを使って主キーを生成する方法 https://qiita.com/KevinFQ/items/a6d92ec7b32911e50ffe
JPA その3 - JPQL https://qiita.com/opengl-8080/items/e074330b5f4862d9995f
Spring Data JPA でのクエリー実装方法まとめ(@Query()とかの使い方) https://qiita.com/tag1216/items/55742fdb442e5617f727
【Spring Data JPA】自動実装されるメソッドの命名ルール(クエリメソッドってやつの参考) https://qiita.com/shindo_ryo/items/af7d12be264c2cc4b252#orderby
JPQL基本の書き方
table名→Entityクラス名
カラム名→フィールド名
で書く。
さらに、teble名を変数宣言する(ここの場合AdressEntity a)
@Table(name="address") public class AddressEntity { @Column(name="city_code") private Integer cityCode; } --------------------------------- 上記に対応したSQLとJPQL SELECT * FROM address Where city_code = ?; //SQL SELECT a FROM AddressEntity a Where a.cityName = ?1; //JPQL
Entity
- @EntityをつけることでDBのテーブルと紐づく
- @Tableでテーブル名を指定
- @Idを付けた変数がテーブルのプライマリーキーになる
- @GeneratedValueをつけると連番が自動で振られるようになる(MySQL側では主キーにオートインクリメントが必須)
- @Columnでカラム名を指定
import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import lombok.Data; @Data @Entity @Table(name="player_table") - public class Player { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name="id") private Integer id; @Column(name="name") private String name; @Column(name="number") private Integer number; @Column(name="position") private String position; }
Repository
中身は空でもOK。独自の処理をしたい時はここに追記。
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface PlayerRepository extends JpaRepository<Player, Long> { @PersistenceContext private EntityManager em; /** * 参考 * @return プレイヤー全リスト */ public List<Player> index() { return em.createQuery("select m from Player m ", Player.class).getResultList(); } }
Service
findAll/findOne/save/deleteはJPAのメソッド。 基本的なCRUDはこれでOK. SQL書かなくてよいのでグッド。
import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class PlayerService { @Autowired private PlayerRepository playerRepository; public List<Player> findAll() { return playerRepository.findAll(); } public Player findOne(Long id) { return playerRepository.findById(id).orElse(null); } public Player save(Player player) { return playerRepository.save(player); } public void delete(Long id) { playerRepository.deleteById(id); } }