[Spring] Spring JDBC/JPA

Kyungmin·2023년 10월 7일
0

Spring

목록 보기
3/39

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 클래스

  • insert 쿼리를 사용하게끔 하는 클래스

  • 먼저 시작할 때 불러오고 싶다면 ‘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 에 해당되는 데이터가 삭제됐음을 알 수 있다.
profile
‘문제 해결’과 '극복의 경험' 을 소중히

0개의 댓글