[インフラ]整理金英漢のスプリング入門[3]
5575 ワード
DBテストの使用
@Transactional
は、試験例においてのみCommitを使用してロールバックされず、通常の構成要素@Component
においてロールバックされずに正常に動作する.集積テスト、ユニットテスト
ユニットテストは純粋なJavaコードとメモリで作成されたテストなので、速度が速い.
だから、できるだけ単位テストを使いましょう.
JdbcTemplate
使い方を簡単に理解してみましょう.@Repository
public class JdbcMovieFinder implements MovieFinder {
private JdbcTemplate jdbcTmple;
@Autowired
public JdbcMovieFinder(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
}
JdbcTemplateオブジェクトへのDIのために、関連関係を見つけ、スプリングコンテナから注入します.int rowCount =
this.jdbcTmple.queryForObject
("select count(*) from t_actor", Integer.class);
(sql문, 리턴할 인스턴스의 형태 혹은 자료형, 혹은 RowMapper , ?에 들어갈 값)
以前JDBCドライバを使用したことがありますか?あなたは何の価値があるか知っています.int countOfActorsNamedJoe =
this.jdbcTemplate.queryForObject
("select count(*) from t_actor
where first_name = ?", Integer.class, "Joe");
pstmt.setString(1,Joe)と同じ意味です.
オブジェクトの場合は、このようにインポートできます.public Optional<Member> findById(Long id) {
List<Member> result =
jdbcTemplate.query
("select * from member where id = ?", memberRowMapper(), id);
return result.stream().findAny();
}
RowMapperはJENICインタフェースなので、インプリメンテーションを作成する必要があります.
TのmapRowの返却を実現すればよい.private RowMapper<Member> memberRowMapper(){ //
return new RowMapper<Member>() {
@Override
public Member mapRow(ResultSet rs, int rowNum) throws SQLException {
Member member = new Member();
member.setId(rs.getLong("id"));
member.setName(rs.getString("name"));
return member;
}
};
}
これによりRowMapperが生成され,Ramdaで生成されるとより簡潔になる.private RowMapper<Member> memberRowMapper(){ //
return (rs, rowNum) -> {
Member member = new Member();
member.setId(rs.getLong("id"));
member.setName(rs.getString("name"));
return member;
};
}
ソース
JPA
今簡単に説明しますが、本当によく整理されたビデオがあるので、後で見ましょう.
JPA基本編整理(tmdgh 0221の開発)
JPAとは?
@Repository
public class JdbcMovieFinder implements MovieFinder {
private JdbcTemplate jdbcTmple;
@Autowired
public JdbcMovieFinder(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
}
int rowCount =
this.jdbcTmple.queryForObject
("select count(*) from t_actor", Integer.class);
(sql문, 리턴할 인스턴스의 형태 혹은 자료형, 혹은 RowMapper , ?에 들어갈 값)
int countOfActorsNamedJoe =
this.jdbcTemplate.queryForObject
("select count(*) from t_actor
where first_name = ?", Integer.class, "Joe");
public Optional<Member> findById(Long id) {
List<Member> result =
jdbcTemplate.query
("select * from member where id = ?", memberRowMapper(), id);
return result.stream().findAny();
}
private RowMapper<Member> memberRowMapper(){ //
return new RowMapper<Member>() {
@Override
public Member mapRow(ResultSet rs, int rowNum) throws SQLException {
Member member = new Member();
member.setId(rs.getLong("id"));
member.setName(rs.getString("name"));
return member;
}
};
}
private RowMapper<Member> memberRowMapper(){ //
return (rs, rowNum) -> {
Member member = new Member();
member.setId(rs.getLong("id"));
member.setName(rs.getString("name"));
return member;
};
}
今簡単に説明しますが、本当によく整理されたビデオがあるので、後で見ましょう.
JPA基本編整理(tmdgh 0221の開発)
JPAとは?
実際,開発者はJDBC APIを使用せず,値を渡す限りJPAは中間から操作し,クエリ文を生成してDBに渡す.
ORMとは?(オブジェクトリレーションシップマッピング)
なぜJPAを使うのですか?
SpringデータJPA
JPAではEntityManagerインスタンスを使用して永続化します.
JPQLゲートを作成して使用しました.
Spring Data JPAで使いやすくする
注意:Spring Data JPAは、JPAをより使いやすくする技術です.
使用方法
RepositoryコンポーネントインタフェースでJpa Repositoryを実装します.public interface SpringDataJpaMemberRepository extends
JpaRepository<Member, Long>, MemberRepository{
// JPQL select m from Member m where m.name = ?
Optional<Member> findByName(String name);
}
ここで,MemberRepositoryは我々が以前作成した実装方法を有するインタフェースであり,JpaRepositoryはSpringデータJPAインタフェースである.
SpringデータJPAの提供
インタフェースを介した基本CRUD findByName()、findByEmail、countなどはメソッド名のみを使用してクエリーを提供します. 自動ページング機能 注意:実際の操作では、SOAPとSpringデータJPAがデフォルトで使用され、複雑なダイナミッククエリではQuerydslというライブラリが使用されます.
スプリングデータJPAを使っただけだと思います.
この機会にJPAにもっと深く入り込んでNodeJsを勉強します
Reference
この問題について([インフラ]整理金英漢のスプリング入門[3]), 我々は、より多くの情報をここで見つけました
https://velog.io/@yskim9718/인프런-김영한님-스프링-입문-정리-3
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
public interface SpringDataJpaMemberRepository extends
JpaRepository<Member, Long>, MemberRepository{
// JPQL select m from Member m where m.name = ?
Optional<Member> findByName(String name);
}
ここで,MemberRepositoryは我々が以前作成した実装方法を有するインタフェースであり,JpaRepositoryはSpringデータJPAインタフェースである.SpringデータJPAの提供
スプリングデータJPAを使っただけだと思います.
この機会にJPAにもっと深く入り込んでNodeJsを勉強します
Reference
この問題について([インフラ]整理金英漢のスプリング入門[3]), 我々は、より多くの情報をここで見つけました https://velog.io/@yskim9718/인프런-김영한님-스프링-입문-정리-3テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol