Spring]Spring入門-Spring DBアクセス技術(1)
Spring入門-コード学習を用いたSpring Boot、Web MVC、DBアクセス技術by金英漢
H 2データベースインストール 純Jdbc ばね集積試験 SpringJdbcTemplate JPA SpringデータJPA
H 2は、Web画面を提供する開発またはテストのための簡単で使いやすいデータベースです.パーミッションサイクル: 実行: データベース・ファイルの作成方法
-
-
-この接続から
H 2データベースへのアクセス
プロジェクトルートディレクトリに
H 2データベースを終了し、再起動します. Webブラウザが自動的に実行される場合、アドレスウィンドウは以下のようになります.(100.1.2.3ではなく任意の数字が表示されます) 前のセクションのみを データベースファイルを作成すると(
以前の記憶実現体と何が違いますか?
DataSourceは、データベース接続を取得するオブジェクトです.Spring Bootは、データベース接続情報に基づいてデータソースを作成し、Spring VINに設定します.従ってDIを取得することができる. オープンクローズ原則(OCP,Open-Closed Principle):拡張、修正、または変更にオープンします. SpringのDependencies Injectionでは、既存のコードを変更せずに設定変更のみでクラスを実装できます. 会員登録し、DBに正しい結果が入力されているかどうかを確認します. データはデータベースに格納されているので、スプリングサーバを再実行してデータを安全に格納することができる.
SpringコンテナとDBに接続する統合テストを行います.
Spring JdbcTemplateやMyBasisのようなライブラリは、JDBC APIから見た重複コードの大部分を削除できます.しかし、SQLは自分で書く必要があります.
Spring DBアクセス技術(1)
1.H 2データベースのインストール
1-1)h 2データベースツールピストル(1.4.200版)
H 2は、Web画面を提供する開発またはテストのための簡単で使いやすいデータベースです.
chmod 755 h2.sh
(ウィンドウユーザーはx)./h2.sh
(ウィンドウユーザーはh2.bat
)-
jdbc:h2:~/test
(初回)-
~/test.mv.db
検証ファイルの作成-この接続から
jdbc:h2:tcp://localhost/~/test
1-2)テーブルの作成
H 2データベースへのアクセス
member
テーブルの作成プロジェクトルートディレクトリに
sql/ddl.sql
ファイルを作成してテーブルを管理drop table if exists member CASCADE;
create table member
(
id bigint generated by default as identity,
name varchar(255),
primary key (id)
);
H 2データベース作成が正常でない場合
次のエラーメッセージが表示され、H 2データベースが正常に作成されない可能性があります。
解決策は以下の通りです。
100.1.2.3
->localhost
に変更し、Enterを入力します.残りの部分は絶対に変更できません.(特に後のセッション部分は変更できません.) jdbc:h2:~/test
)、データベースは正常に作成されます.2.純JDBCでデータベースを接続する
2-1)優先パラメータ
build.jdbc、h 2データベース関連ライブラリをgradeファイルに追加
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
runtimeOnly 'com.h2database:h2'
スプリングの追加データベース接続設定の開始
resources/application.properties
spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
注意!スプリング起動2.4から、spring.datasource.username=sa
を追加する必要があります.Wrong usernameまたはpasswordエラーが発生します.最後にスペースがある場合は、同じエラーが発生することに注意してください.spring.datasource.username=sa
スペースに注意してください.スペースはすべて削除します.2-2)Jdbcリポジトリ実装
以前の記憶実現体と何が違いますか?
MemoryMemberRepository
:MemberRepository
メモリにインタフェースを実装JdbcMemberRepository
:DBを接続しJdbcで実現ex.メンバーを保存するsave()メソッド
public class JdbcMemberRepository implements MemberRepository {
private final DataSource dataSource;
// 생성자가 하나이면 @Autowired 생략 가능
public JdbcMemberRepository(DataSource dataSource) {
this.dataSource = dataSource;
}
@Override
public Member save(Member member) {
String sql = "insert into member(name) values(?)";
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
conn = getConnection();
pstmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
pstmt.setString(1, member.getName());
pstmt.executeUpdate();
rs = pstmt.getGeneratedKeys();
if (rs.next()) {
member.setId(rs.getLong(1));
} else {
throw new SQLException("id 조회 실패");
}
return member;
} catch (Exception e) {
throw new IllegalStateException(e);
} finally {
close(conn, pstmt, rs);
}
}
...
}
スプリング設定の変更
@Bean
public MemberRepository memberRepository() {
// return new MemoryMemberRepository();
return new JdbcMemberRepository(dataSource);
}
3.スプリング集積テスト
SpringコンテナとDBに接続する統合テストを行います.
会員サービススプリング統合テスト
@SpringBootTest
@Transactional
class MemberServiceIntegrationTest {
@Autowired MemberService memberService;
@Autowired MemberRepository memberRepository;
@Test
public void 회원가입() throws Exception {...}
@Test
public void 중복_회원_예외() throws Exception {...}
}
@SpringBootTest
:スプリング容器とともに試験を実行@Transactional
:テストケースにこのプレゼンテーションがある場合は、テストの開始前にトランザクションを開始し、テストが完了した後もロールバックします.データベースにデータが保持されないため、次のテストには影響しません.@Rollback
:テストが完了した後にデータベースにデータがあるかどうかを確認するには、実行するテストクラスまたはメソッドに@Rollback
(org.springframe.test.annotation.rollback)コメントを追加し、valueでfalse
値を入力します.( @Rollback(false)
)4.Spring JdbcTemplateを使用してデータベースに接続する
4-1)純Jdbcと同じ環境を設定する。
Spring JdbcTemplateやMyBasisのようなライブラリは、JDBC APIから見た重複コードの大部分を削除できます.しかし、SQLは自分で書く必要があります.
4-2)JdbcTemplateリポジトリ実装
ex.メンバーを保存するsave()メソッド
public class JdbcTemplateMemberRepository implements MemberRepository {
private final JdbcTemplate jdbcTemplate;
public JdbcTemplateMemberRepository(DataSource dataSource) {
jdbcTemplate = new JdbcTemplate(dataSource);
}
@Override
public Member save(Member member) {
SimpleJdbcInsert jdbcInsert = new SimpleJdbcInsert(jdbcTemplate);
jdbcInsert.withTableName("member").usingGeneratedKeyColumns("id");
Map<String, Object> parameters = new HashMap<>();
parameters.put("name", member.getName());
Number key = jdbcInsert.executeAndReturnKey(new MapSqlParameterSource(parameters));
member.setId(key.longValue());
return member;
}
}
スプリング設定を変更してJdbcTemplateを使用
@Bean
public MemberRepository memberRepository() {
// return new MemoryMemberRepository();
// return new JdbcMemberRepository(dataSource);
return new JdbcTemplateMemberRepository(dataSource);
}
Reference
この問題について(Spring]Spring入門-Spring DBアクセス技術(1)), 我々は、より多くの情報をここで見つけました https://velog.io/@heewonim/Spring-스프링-입문-스프링-DB-접근-기술-1テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol