일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- spring
- jpa
- 쿠키란
- 인터셉터의 정의
- 유연한 컨트롤러1 - v5
- 구글 보안 api 활용
- n+1
- 필터vs인터셉터
- Validation
- 세션이란
- 세션의 정의
- springSecurityFilterChain 오류
- java.lang.AssertionError
- @Controller
- SpringMVC
- filter vs interceptor
- 401오류
- Testcode
- application-properties
- 세션vs쿠키
- BindingResult
- 김영한
- spring MVC
- MVC
- .orelseThrow
- optional
- 필터의 정의
- 쿠키의 정의
- abap value in field Data Class error
- controller
- Today
- Total
ABAP DUMP ERROR 24시
SQL을 직접 사용하는 경우Q vs JPA 본문
# 자바 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); 처럼 간단하게 만들어서 사용할수는 없을까?
--준비중--
'[WEB]Back-end > JPA' 카테고리의 다른 글
Fetch join 의 한계가 뭐야? (0) | 2022.01.24 |
---|---|
@OneToMany 일 때 fetch join 시 data의 량이 늘어난다? (0) | 2022.01.22 |
Jpql fetch join 이 뭐야? ,N+1 예시 (0) | 2022.01.22 |
JPQL이 뭐야? 어떻게 사용해? (0) | 2022.01.21 |
@Inheritance(strategy=InheritanceType.SINGLE_TABLE) 전략 (0) | 2022.01.21 |