Reference. 자바 ORM 표준 JPA 프로그래밍
책 목차 및 이전 글
1.1.1 반복, 반복 그리고 반복
예제1.
public class Member {
private String memberId;
private String name;
...
}
public class MemberDAO {
public member find(String memberId{...}
}
기존의 개발 순서
1. 회원 조회용 SQL을 작성한다.
SELECT MEMBER_ID, NAME FROM MEMBER M WHERE MEMBER_ID = ?
2. JDBC API, Mybatis를 사용해서 SQL을 실행한다.
ResultSet rs = stmt.executeQuery(sql); //JDBC
UserDto userdto = MemberMapper.select(UserDto); //Mybatis, ibatis
3. 조회 결과를 Member 객체로 매핑한다.
String memberId = rs.getString("MEMBER_ID");
String name = rs.getString("NAME");
Member member = new Member();
member.setMemberId(memberId);
member.setName(name);
...
회원 객체를 데이터베이스가 아닌 자바 컬렉션으로 보관한다면 어떨까? →list.add(member);
하지만 데이터베이스는 객체 구조와 다른 데이터 중심의 구조를 가지므로 직접 저장 조회가 불가
겍체들을 CRUD를 하려면 많은 SQL과 JDBC API를 작성해야 한다.
(테이블 수 * 커스텀이 필요한 쿼리) = 무수한 SQL 작성
1.1.2 SQL에 의존적인 개발
등록 코드 변경
→ 고객에 의해 Member에 tel 필드가 추가된 경우
public class Member {
private String memberId;
private String name;
private String tel; //추가
...
}
- insert 쿼리 수정
String sql = "insert into member(member_id, name, tel) values(?, ?, ?)";
pstmt.setString(3, memer.getTel());
- 조회 코드 변경
SELECT MEMBER_ID, NAME, TEL, FROM MEMBER WHERE MEMBER_ID = ?
...
String tel = rs.getString("TEL");
member.setTel(tel);
- update 쿼리 수정
UPDATE MEMBER SET ... TEL = ? WHERE MEMBER_ID = ?
만약 회원 객체를 데이터베이스가 아닌 자바 컬렉션으로 보관한다면 어떨까?
list.add(member); //등록
Member member = list.get("1"); //조회
member.setTel("010-xxxx-xxxxx"); //수정
연관된 객체
public class Member {
private String memberId;
private String name;
private String tel;
private Team team; //추가
...
}
class Team {
...
private String teamName;
...
}
public class MemberDAO {
public member find(String memberId{...}
public member findWithTeam(String memberId{...}
}
SELECT M.MBER_ID, M.NAME, M.TEL, T.TEAM_ID, T.TEAM_NAME
FROM MEMBER M
JOIN TEAM T
ON M.TEAM_ID = T.TEAM_ID
- Member 객체가 연관된 Team 객체를 사용가능 여부는 SQL에 달림
- 데이터 접근 계층을 사용해서 SQL을 숨겨도 DAO를 열어서 SQL이 실행되는지 확인 필요
- 논리적으로 엔티티와 아주 강한 의존관계를 가짐
→ 조회 및 객체 필드를 추가하면 DAO의 CRUD코드와 SQL 대부분을 변경해야하는 문제발생
1.1.3 JPA와 문제 해결
- JPA를 사용하면 SQL을 작성하는 것이 아니라 JPA가 제공하는 API를 사용하면 됨
→ * 수정 메소드를 제공하지 않음.
대신 객체를 조회해서 값을 변경하면 트랜잭션 커밋할 때, 적절한 UPDATE SQL이 전달
//------------저장------------
jpa.persist(member);
//------------조회------------
String memberId = "helloId";
Member member = jpa.find(Member.class, memberId);
//------------수정------------
Member member = jpa.find(Member.class, memberId);
member.setName("이름변경")
//------------연관된 객체 조회------------
Member member = jpa.find(Member.class, memberId);
Team team = member.getTeam();
'개발서적 > 자바 ORM 표준 JPA' 카테고리의 다른 글
[자바 ORM 표준 JPA 프로그래밍] 3.1 엔티티 매니저 팩토리와 엔티티 매니저 (0) | 2021.07.28 |
---|---|
[자바 ORM 표준 JPA 프로그래밍] 2. JPA 시작 (0) | 2021.07.23 |
[자바 ORM 표준 JPA 프로그래밍] 1.3 JPA란 무엇인가? (0) | 2021.07.23 |
[자바 ORM 표준 JPA 프로그래밍] 1.2 패러다임의 불일치 (0) | 2021.07.23 |
[자바 ORM 표준 JPA 프로그래밍] JPA 특징, Q&A (0) | 2021.07.23 |