Spring]Spring入門-Spring DBアクセス技術(2)
Spring入門-コード学習を用いたSpring Boot、Web MVC、DBアクセス技術by金英漢
H 2データベースインストール 純Jdbc ばね集積試験 SpringJdbcTemplate JPA SpringデータJPA JPAは、既存の重複コードを実行するだけでなく、JPA自身で基本的なSQLを作成して実行することもできます. JPAを使用すると、SQLとデータ中心の設計からオブジェクト中心の設計に移行できます. JPAは開発効率を大幅に向上させることができる.
springは、クラスメソッドの実行時にトランザクションを開始し、メソッドが正常に終了したときにトランザクションをコミットします.実行時に異常が発生した場合は、ロールバックします. 注意!JPAによるすべてのデータ変更は、トランザクションで実行する必要があります.
SpringデータJPAを使用すると、リポジトリに実装クラスを設定することなく、インタフェースだけで開発が完了します. 繰り返し開発された基本CRUD機能もSpring Data JPAから提供されている. ベーシックCRUD 自動ページング
注意:実際の操作では、基本的にJPAとSpringデータJPAが使用されますが、複雑なダイナミッククエリではQuerydslというライブラリが使用されます.Querydslを使用するとjavaコードを安全に使用してクエリーを記述したり、動的クエリーを容易に記述したりすることができます.JPAが提供するネイティブクエリーまたは以前に学習したSpring JdbcTemplateを使用すると、この組み合わせでは解決しにくいクエリーを解決できます.
スプリングデータJPA設定は、上記のJPA設定を使用します.
SpringData JPAは、
Spring DBアクセス技術(2)
5. JPA
build.JPAライブラリをgradeファイルに追加
dependencies {
// implementation 'org.springframework.boot:spring-boot-starter-jdbc'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
}
Spring-boot-start-data-jpa内部にはjdbc関連ライブラリが含まれています.したがって、jdbcを削除できます.JPA設定をスプリングガイドに追加
resources/application.properties
...
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=none
show-sql
:JPA生成SQLを出力します.ddl-auto
:JPAはテーブルを自動的に作成する機能を提供し、Noneはこの機能をオフにします.H 2 DBをインストールして直接テーブルを作成したのでnoneに設定します.create
エンティティ情報に基づいて直接テーブルを作成JPAエンティティのマッピング
@Entity
public class Member {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
...
}
@GeneratedValue(strategy = GenerationType.IDENTITY)
:プリファレンスJPA会員庫
package hello.hellospring.repository;
import hello.hellospring.domain.Member;
import javax.persistence.EntityManager;
import java.util.List;
import java.util.Optional;
public class JpaMemberRepository implements MemberRepository {
private final EntityManager em;
public JpaMemberRepository(EntityManager em) {
this.em = em;
}
public Member save(Member member) {
em.persist(member);
return member;
}
public Optional<Member> findById(Long id) {
Member member = em.find(Member.class, id);
return Optional.ofNullable(member);
}
public List<Member> findAll() {
return em.createQuery("select m from Member m", Member.class)
.getResultList();
}
public Optional<Member> findByName(String name) {
List<Member> result = em.createQuery("select m from Member m where m.name = :name", Member.class)
.setParameter("name", name)
.getResultList();
return result.stream().findAny();
}
}
サービス・レベルへのトランザクションの追加
import org.springframework.transaction.annotation.Transactional
@Transactional
public class MemberService {...}
org.springframework.transaction.annotation.Transactional
スプリング設定を変更してJPAを使用
@Configuration
public class SpringConfig {
private final DataSource dataSource;
private final EntityManager em;
public SpringConfig(DataSource dataSource, EntityManager em) {
this.dataSource = dataSource;
this.em = em;
}
@Bean
public MemberRepository memberRepository() {
// return new MemoryMemberRepository();
// return new JdbcMemberRepository(dataSource);
// return new JdbcTemplateMemberRepository(dataSource);
return new JpaMemberRepository(em);
}
}
6.SpringデータJPA
SpringデータJPAの提供
findByName()
,findByEmail()
メソッド名のみを使用したクエリー機能を提供注意:実際の操作では、基本的にJPAとSpringデータJPAが使用されますが、複雑なダイナミッククエリではQuerydslというライブラリが使用されます.Querydslを使用するとjavaコードを安全に使用してクエリーを記述したり、動的クエリーを容易に記述したりすることができます.JPAが提供するネイティブクエリーまたは以前に学習したSpring JdbcTemplateを使用すると、この組み合わせでは解決しにくいクエリーを解決できます.
Spring Data JPAメンバーライブラリ
package hello.hellospring.repository;
import hello.hellospring.domain.Member;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional;
public interface SpringDataJpaMemberRepository extends JpaRepository<Member, Long>, MemberRepository {
Optional<Member> findByName(String name);
}
スプリングデータJPAメンバーライブラリを使用するためのスプリング設定の変更
package hello.hellospring;
import hello.hellospring.repository.*;
import hello.hellospring.service.MemberService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SpringConfig {
private final MemberRepository memberRepository;
public SpringConfig(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
@Bean
public MemberService memberService() {
return new MemberService(memberRepository);
}
}
SpringDataJpaMemberRepository
Spring VINを自動的に登録します.Spring Data JPA提供クラス
Reference
この問題について(Spring]Spring入門-Spring DBアクセス技術(2)), 我々は、より多くの情報をここで見つけました https://velog.io/@heewonim/Spring-스프링-입문-스프링-DB-접근-기술-2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol