JDBC vs JPA
- JDBC : SQL 쿼리를 많이 작성해야하고 자바 코드도 많이 작성
- Spring JDBC : SQL 쿼리를 많이 작성하는데 자바 코드는 적게 작성
- JPA : 쿼리를 신경 쓸 필요가 없음(작성x, 직접 테이블로 바로 매핑 가능)
- spring data JPA : 코드의 양이 적음
1.JDBC
1. H2 콘솔을 사용하거나 데이터베이스로 엑세스 하는 방법은 application.properties 에서 프로퍼티를 설정하는것
- line 1 :동적으로 난수를 생성 -> 매번 URL이 동적으로(난수) 생성되어 h2에 연결할 때 귀찮음
- line 2: 정적으로 URL 생성 -> 편함
2. JDBC URL 칸에 콘솔창에 있는 URL 입력 후 Connect !
✅ H2 콘솔
3. ~resources/schema.sql 파일 생성 후 다음과 같이 테이블 생성
- biting = long 으로 매핑
- varchar = string 으로 매핑
✅ H2 콘솔
- 재 시작후 h2 콘솔을 새로고침 한 후 연결을 하고나면 왼쪽에 COURSE 가 생김
- SELECT * FROM COURSE 를 하고 RUN 을 실행하면 밑에 잘 테이블이 실행되는 것을 확인할 수 있음
- h2 콘솔의 데이터는 서버를 재시작할 때마다 새로고침 된다는 점을 기억하자
Spring JDBC
- 데이터를 삽입하고 COURSE 테이블에 있는 데이터를 삭제할 수 있다.
- JDBC 코드와 비교해서 Spring JDBC 는 쿼리를 직접 작성해야 하긴하지만, 훨씬 간결해진다.
✅ CourseJdbcRepository 클래스
- 데이터베이스에 쿼리를 사용
- “”” ~ “”” (text block) : 장점은 쿼리 형식을 그대로 유지가 가능
- INSERT_QUERY 에 사용할 쿼리 저장 후 insert() 에서 update() 메소드로 호출
✅ CourseJdbcCommandLineRunnnner 클래스
-
먼저 시작할 때 불러오고 싶다면 ‘implements CommandLineRunner 클래스를 임포트
-
run() 메소드를 오버라이드한 후, 실행할 쿼리 입력
-
@Autowired 를 뺴놓지 말고 잘 쓰자 ( 질문 !!! : 왜 저 코드에 @Autowired를 써야하지? )
-> @Autowired 애노테이션을 사용하면 Spring이 해당 타입의 빈(Bean)을 찾아 해당 필드 에 자동으로 주입한다.
Spring JDBC 이용한 데이터 삽입 / 삭제
1. 데이터 삽입
✅ CourseJdbcRepository 클래스
- values 에 (?,?,?) 과 같이 넘겨주면
springJdbcTemplate.update(INSERT_QUERY,
course.getId(),course.getName(),course.getAuthor()); 에서 받아와 값을 넘겨준다.
- 데이터의 순서는 ‘( )’ 안의 순서대로 넘어감
✅ CourseJdbcCommandRunner 클래스
- repository.insert(new Course(1,"Learn AWS NOW","in28minutes"));
에 새 과정을 생성
- 데이터를 추가하고 싶다면 repository.insert(new Course()); 로 데이터를 추가할 수 있다.
- Course 클래스를 만들어 생성자 . getter, toString 메서드를 선언해놔야 한다.
✅ H2 콘솔
2. 데이터 삭제
✅ CourseJdbcRepository 클래스
- DELETE_QUERY 작성 후 deleteById 선언 후 update() 메서드에서 원하는 데이터를 받아 삭제
✅ CourseJdbcCommandRunner 클래스
- repository.deleteById(1); 로. id : 1 삭제
✅ H2 콘솔
- id : 1 에 해당되는 데이터가 삭제됐음을 알 수 있다.