ABAP DUMP ERROR 24시

SQL을 직접 사용하는 경우Q vs JPA 본문

[WEB]Back-end/JPA

SQL을 직접 사용하는 경우Q vs JPA

이운형 2022. 5. 18. 23:05
반응형

# 자바 ORM 표준 JPA 프로그래밍 김영한님의 책을 읽고 정리한 글입니다.

 

1. SQL 의존 개발의 문제점

 

1. 진정한 의미의 계층 분할이 어렵다. = 결국 SQL ,SQL, SQL...

2. 엔티티를 신뢰할수 없다 = 연관, 상속.. 결국에는 SQL을 까서 구조를 확인해야한다.

3. 추상화 ,캡슐화, 정보은닉,상속 ,다형성 과 같은 객체지향의 강점을 사용하기 어려워진다.

 

1. SQL 을 직접 사용하는 경우

=> JAVA APP의 JDBC API 를 사용해서 SQL를  DB에 전달한다.

 

이때 CRUD 로직 작성 방법

 

1. 회원 객체 생성

public class Member(){

private String memberId;

}

 

2. 회원 조회 기능 Dao 제작을 해야 한다면?

public class MemberDao(){

 public Member find(String memberId){...}

 public Member save(String memberId){...}

}

 

1) 회원 조회, 저장용 SQL작성

SELECT * FRROM MEMBER M WHERE MEMBER_ID=? 

INSERT INTO MEMBER(MEMBER_ID) VALUES(?,?)

 

2) JDBC API 를 사용해서 SQL을 실행

ResultSet rs = stmt.executeQuery(sql);

pstmt.executeUpdate(INSERT INTO MEMBER(MEMBER_ID) VALUES(?,?))

 

3) DB조회 결과를 Member 객체로 매핑

String memberId = rs.getString("MEMBER_ID");

Member member = new Member();

member.setMemberId(memberId);

 

 

마치 영어와 한국어를 통역해주는 통역사 같은 역할 해야해!

 

 

DB는 객체와는 다른 데이터 중심의 구조를 가지기 때문에 객체를 DB에 직접 저장및 조회가 불가능하다.

따라서, JDBC API 와 SQL을 활용해서 변환 작업을 '사람이' 해주어야한다. 

 

 

3. 회원 조회 기능을 변경해야 한다면?

 

1) 회원 객체 생성

public class Member(){

private String memberId;

private String tel // 추가 내용

}

 

2) 회원 조회 기능 Dao 제작

public class MemberDao(){

 public Member find(String memberId){...}

 public Member save(String memberId){...}

}

1) 회원 조회, 저장용 SQL 수정

SELECT * FRROM MEMBER M WHERE MEMBER_ID=? 

INSERT INTO MEMBER(MEMBER_ID,TEL) VALUES(?,?) // 여기 TEL 추가 + setter 추가

 

2) JDBC API 를 사용해서 SQL을 실행 

ResultSet rs = stmt.executeQuery(sql);

pstmt.executeUpdate(INSERT INTO MEMBER(MEMBER_ID) VALUES(?,?))

 

3) DB조회 결과를 Member 객체로 매핑

String memberId = rs.getString("MEMBER_ID");

Member member = new Member();

member.setMemberId(memberId);

member.setTel(tel); //추가

 

 

정리하자면 ,

기능 하나 추가하기 위해서는

관련 기능 SQL 전부 변경, Setter 객체 추가, 객체 매핑 추가

 

결국 Dao를 열어서 어떤 SQL이 실행이 되는지 확인해야 한다.

 

list.add(memberId);list.add(tel); 처럼 간단하게 만들어서 사용할수는 없을까?

 

 

 

--준비중--

반응형
Comments