Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 자바 유클리드
- 스프링
- 최대공약수
- git 컨벤션
- while과 two-pointer
- addDoc
- 유클리드호제법
- 자바 최소공배수
- StringBuilder
- Git사용법
- string과 stringbuilder
- replaceAll()
- 래퍼타입
- toLowerCase()
- 모던자바
- sql 데이터형 변환
- 자바 최대공약수
- 스프링환경설정
- 자바 스트링
- 최대공약수와 최소공배수
- ineer join
- 동일성과 동등성
- 베주계수
- string
- 최소공배수
- islowercase()
- isuppercase()
- stringbuilder의 reverse()
- 스프링뼈대
- 프로그래머스 레벨1
Archives
- Today
- Total
주노 님의 블로그
[Spirng] 7. Spring 데이터베이스 연동 - JDBC를 통한 데이터베이스 연동 본문
시작하기에 앞서
아래 내용은 김영한님의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB접근기술에서 발췌한 내용입니다.
강의자료 일부를 발췌하는건 괜찮다고 하셨다.
무료강의로 지식을 공유해주신 김영한님께 다시한번 감사의 인사를 올리겠습니다
(_ _) (유료도 샀어요!)
애플리케이션에서 DB와 연동하는방법중 하나인 JDBC를 이용해보자
JDBC 학교에선 많이 배웠던거같은데 그냥 스르르륵... 들으면된다더라
1. repository 생성
그리고 repository에 JdbcMemberRepository를 만들어준다
public class JdbcMemberRepository implements MemberRepository {
// 데이터베이스 연결을 위해 DataSource 객체를 사용합니다. 이 객체는 데이터베이스 커넥션 풀을 관리합니다.
private final DataSource dataSource;
// 생성자를 통해 Spring 컨테이너로부터 DataSource 객체를 주입받습니다. 이 방법은 의존성 주입을 통해 객체를 관리하고, 결합도를 낮춥니다.
public JdbcMemberRepository(DataSource dataSource) {
this.dataSource = dataSource;
}
public Member save(Member member) {
// SQL 쿼리 문장을 정의합니다. 여기서는 member 테이블에 name을 삽입합니다.
String sql = "insert into member(name) values(?)";
// JDBC에서 사용될 Connection, PreparedStatement, ResultSet 객체를 초기화합니다.
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
// 데이터베이스 연결을 확립합니다.
conn = getConnection();
// SQL 문을 준비하고, 자동으로 생성되는 키(주로 ID)를 반환받을 수 있도록 설정합니다.
pstmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
// 첫 번째 파라미터(?)에 회원 이름을 설정합니다.
pstmt.setString(1, member.getName());
// SQL 쿼리를 실행하고, 데이터베이스에 데이터를 삽입합니다.
pstmt.executeUpdate();
// 삽입된 데이터의 생성된 키(예: auto-increment ID)를 가져옵니다.
rs = pstmt.getGeneratedKeys();
// 생성된 키가 있는지 확인하고, 있다면 Member 객체에 ID를 설정합니다.
if (rs.next()) {
member.setId(rs.getLong(1)); // 키 값이 있다면 Member 객체에 설정
} else {
// 키를 조회할 수 없는 경우, 예외를 발생시킵니다.
throw new SQLException("id 조회 실패");
}
// 작업이 성공적으로 완료되면 수정된 Member 객체를 반환합니다.
return member;
} catch (Exception e) {
// 예외 발생 시, 상태를 불안정 상태로 표시하고 예외를 던집니다.
throw new IllegalStateException(e);
} finally {
// finally 블록에서는 열린 자원들을 반드시 닫아줍니다. 이는 자원 누수를 방지합니다.
close(conn, pstmt, rs);
}
}
// 나머지도 구현
}
모든 코드를 제공하기엔 그렇고 save메서드만 확인하면 될것같다
2. config 수정
기존에 작성해둔 SpringConfig를 들어간다
//스프링 부트가 데이터베이스와 연결할수있는 데이터소스를 생성해준다
private DataSource dataSource;
//생성자 주입을 통해 의존성을 주입해준다.
public SpringConfig(DataSource dataSource) {
this.dataSource = dataSource;
}
@Bean
public MemberRepository memberRepository()
{
// return new MemoryMemberRepository();
return new JdbcMemberRepository(dataSource);
}
위 내용을 추가한다
config만 수정을 했어도, 메모리에서 데이터베이스 연동으로 바꿀수있다
DataSource는 데이터베이스 커넥션을 획득할 때 사용하는 객체이다.
문제없이 실행되는것을 볼 수 있다
3. 스프링을 왜쓰나
객체지향적인 설계가 가능하기때문이다
다른 기능이 추가되었을때, 의존하는 다른 모든 코드의 수정이 필요하지만,
스프링의 의존성 주입을 사용하면 기존의 코드를 수정하지않고, 한 부분의 코드만 수정하면된다.
이는 객체지향의 원칙 중 개방 - 폐쇄원칙을 준수하였다.
'공부 > Spring' 카테고리의 다른 글
[Spirng] 7. Spring 데이터베이스 연동 - JDBCTemplate (0) | 2024.07.29 |
---|---|
[Spirng] 7. Spring 데이터베이스 - 단위테스트 (JUNIT) (0) | 2024.07.29 |
[Spirng] 7. Spring 데이터베이스 연동 - H2데이터베이스 설치 (0) | 2024.07.28 |
[Spring] 6.웹 기능을 위한 프론트엔드 구성 (0) | 2024.07.28 |
[Spirng] 5. 스프링 빈과 의존관계 설정 (0) | 2024.07.28 |