TIL-JAVA Spring DAY 16(JPA実施完了)
17412 ワード
JPAを実施する前に環境整備作業を行っている.次はドメインに触ってみましょう.domainpackageで
PKはDBで値を生成します.
ただし、以前にDBにinsert文を作成した場合(insert into member(name)values(「spring 1」)自動割付IDがh 2コンソールで見られた.このように、データベースに値を入力すると、データベースが自動的に生成するポリシーはIDENTITYポリシーと呼ばれ、@GenerateValueはこれを表します.
上記の注釈をDBにマッピングすることで、この情報に基づいてInsert、Select、Delete文などのSQL文をJPAが自動的に記述することができます.
次に、JPAベースの動的レポートを作成します.
JPAの動作方式は
これにより、JPAは、Insert queryを作成し、DB、
idを使用して検索する
一般的に、SQL文の作成方法は
また、マッピングも必要です.しかしJpqlを用いて記述すると,
第4の形態で実施
最後に、JPAを使用するには、データの格納と変更に注意することが多いため、トランザクションは動作しなければなりません.したがって、
ついに最後に...組立段階.
Service Packageの
(MemberRepositoryの歴史…)
これは期待される総合テスト時間です.一体…?
成功!テスト結果をよく見て...
上述したように、hibernateインプリメンテーションがselectおよびinsert queryを解放していることがわかる.
こうしてJPAの勉強は終わりました技術の進歩の様式は私にいかなる啓示をもたらした.誰もが純粋で当たり前のオリジナルJDBCコードでDBと共同開発していると、気分が悪くなる人もいるかもしれません.また,このような不便に基づいてspringJdbc Templateが再誕生する可能性がある.JPAフレームワークもこのようなニーズに基づいて生まれた.
何でも、開発時に不快感を覚えるのは新発明の始まりであり、常に不快感を感じる3つの考え方とその態度を改善しようと努力することが重要であることを認識する.
Member.java
クラスを開き、次のように変更します.Member.java
package hello.hellospring.domain;
import javax.persistence.*;
@Entity // 1.
public class Member {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) // 2.
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@Entity
注記を貼れば、これからJPA管理の対象となります.@Id
, @GeneratedValue(strategy = GenerationType.IDENTITY)
PK(primary key)を表すために@Id
が貼られています.PKはDBで値を生成します.
ただし、以前にDBにinsert文を作成した場合(insert into member(name)values(「spring 1」)自動割付IDがh 2コンソールで見られた.このように、データベースに値を入力すると、データベースが自動的に生成するポリシーはIDENTITYポリシーと呼ばれ、@GenerateValueはこれを表します.
次に、JPAベースの動的レポートを作成します.
JpaMemberRepository.class
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; // 1.
public JpaMemberRepository(EntityManager em) {
this.em = em;
}
@Override
public Member save(Member member) {
em.persist(member); // 2.
return member;
}
@Override
public Optional<Member> findById(Long id) {
Member member = em.find(Member.class, id); // 3.
return Optional.ofNullable(member);
}
@Override
public Optional<Member> findByName(String name) {
List<Member> result = em.createQuery("select m from Member m where m.name = :name", Member.class) // 4.
.setParameter("name", name)
.getResultList();
return result.stream().findAny();
}
@Override
public List<Member> findAll() {
List<Member> result = em.createQuery("select m from Member m", Member.class)
.getResultList();
return result;
}
}
JPAの動作方式は
EntityManager
である.そこで、これを基に、作成者も作成しました.私たちは以前gradleで'org.springframework.boot:spring-boot-starter-data-jpa'
を実現しました.これによりspringbootはEntityManager
を自動的に生成します.注射を受けさえすればいいです.これにより、JPAは、Insert queryを作成し、DB、
member
、setIdに保存する.idを使用して検索する
findById
メソッドでは、em.find
を使用してパラメータ値としてクエリーするタイプとPK値を入力するだけでよい.△値段がないかもしれないので、かばうことにした.findByName
という名前のメソッドは、通常SQLをテーブルオブジェクトとして使用しますが、オブジェクトに対するクエリーを使用する特殊なオブジェクト向けクエリー言語、すなわちJpqlを使用する必要があります.一般的に、SQL文の作成方法は
"select * from Member"
、"select m.Id Member"
と同じです.また、マッピングも必要です.しかしJpqlを用いて記述すると,
"select m from Member m"
のようにMember
Entity自体が選択されていることがわかる.地図も描きました.第4の形態で実施
MemberService.class
には、以下の注釈が追加される.@Transactional
public class MemberService {
private final MemberRepository memberRepository;
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
Config...
ついに最後に...組立段階.
Service Packageの
Spring config.class
を表示します.private DataSource dataSource;
@AutoWired
public SpringConfig(DataSource dataSource) {
this.dataSource = dataSource;
}
前述したように、dataSource
で以前に受信したコンテンツは削除され、EntitiyManager
で受信したコンテンツは以下のように記述される.private EntityManager em;
@Autowired
public SpringConfig(EntityManager em) {
this.em = em;
}
その後、memberRepository()
メソッドにJpaMemberRepository(em)
を追加し、以下に示すようにする. @Bean
public MemberRepository memberRepository() {
return new JpaMemberRepository(em);
}
(MemberRepositoryの歴史…)
これは期待される総合テスト時間です.一体…?
成功!テスト結果をよく見て...
上述したように、hibernateインプリメンテーションがselectおよびinsert queryを解放していることがわかる.
こうしてJPAの勉強は終わりました技術の進歩の様式は私にいかなる啓示をもたらした.誰もが純粋で当たり前のオリジナルJDBCコードでDBと共同開発していると、気分が悪くなる人もいるかもしれません.また,このような不便に基づいてspringJdbc Templateが再誕生する可能性がある.JPAフレームワークもこのようなニーズに基づいて生まれた.
何でも、開発時に不快感を覚えるのは新発明の始まりであり、常に不快感を感じる3つの考え方とその態度を改善しようと努力することが重要であることを認識する.
Reference
この問題について(TIL-JAVA Spring DAY 16(JPA実施完了)), 我々は、より多くの情報をここで見つけました https://velog.io/@kjh950330/TIL-JAVA-spring-DAY-16-JPA-구현-完テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol