일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- anyMatch
- @Table
- JPA
- gitrevert
- 매핑정보가없는필드
- 자바ORM표준프로그래밍
- ERROR TYPE : org.apache.ibatis.binding.BindingException
- 네이버로그인API
- HTTP3
- Invalid bound statement (not found)
- DB방언
- 데이터베이스 방언
- KAKAOLOGINAPI
- @Entity
- 무상태프로토콜
- gitreset
- fixedDelay
- 김영한JPA
- org.apache.ibatis.binding.BindingException
- SpringBoot
- initialDelay
- 네이버 연결된 서비스
- 멱등활용
- hibernate.dialect
- HTTPMESSAGE
- RFC723x
- Transaction not successfully started
- http
- Git
- 캐쉬가능
- Today
- Total
twocowsong
JPA를 사용 해야하는 이유 본문
아래와 같이 회원 객체가 있다고 생각해보자.
public class Member {
private String memberId;
private String name;
...
}
회원 객체 기반으로 DB관리할 목적으로 회원용 DAO를 만들어 보자
public class MemberDao {
public Member find(String memberId) {...}
}
그러면 보통 다음 순서로 개발을 진행이 될것입니다.
1. 회원 조회용 SQL 작성
-> SELECT MEMBER_ID, NAME FROM MEMBER M WHERE MEMBER_ID = ?
2. JDBC API를 사용해서 SQL을 실행
- ResultsSet rs = stmt.executeQuery(sql);
3. 조회 결과를 Member 객체로 매핑하게된다.
- String memberId = rs.getString("MEMBER_ID");
- String name = rs.getString("NAME");
또 회원등록을 위한 기능을 만들기위해서는 위와같은 내용을 반복해야합니다.
DB는 객체 구조와는 다른 데이터 중심의 구조를 가지므로 객체를 DB에 직접 저장하거나 조회할수는 없습니다.
따라서 개발자가 객체지향 애플리케이션과 DB중간에서 SQL과 JDBC API를 사용하여 변환 작업을 직접 해주어야합니다.
문제는 객체를 DB에 CRUD하려면 너무 많은 SQL과 JDBC API를 코드로 작성해야한다는 점입니다.
그리고 테이블마다 이런 비슷한 일을 반복해야하는데 개발하려는 애플리케이션에서 사용하는 DB 테이블이 많을 수록 반복작업이 늘어나게 됩니다.
이때 Member테이블에서 추가 컬럼이 발생될 경우 MEMBER에 연관된 SQL모두가 수정되어야하는 상황이 발생되게됩니다. 저희는 사람이기때문에 실수 할 수 있으며 실수가 발생하면 에러로 연결되게 됩니다.
또 아래와같이 Member테이블에 Team이 추가될경우를 생각해보자.
public class Member {
private String memberId;
private String name;
private Team team;
...
}
public class Team {
private String teamName;
}
위와 같이 객체가 수정될 경우 Member객체에 연관된 Team객체를 사용할 수 있을지 없을지는 전적으로 사용하는 SQL에 달려있습니다. 이런방식의 가장 큰 문제는 DAO를 열어서 어떤 SQL이 실행되는지 확인해야 한다는 것입니다. 이렇게 엔티티에 변동성이 발생되면 회원을 조회할때는 물론 회원객체에 필드를 하나 추가할때도 DAO의 CRUD코드와 SQL 대부분을 변경해야하는 문제가 발생됩니다.
JPA를 사용하면 객체를 DB에 저장하고 관리할때, 개발자가 직접 SQL을 작성하는것이아니라 JPA가 제공하는 API를 사용하면됩니다. 그러면 JPA가 개발자 대신에 적절한 SQL을 생성해서 DB에 전달합니다.
저장 기능
jpa.persist(member); // 저장
persist메소드는 객체를 DB에 저장합니다. 이메소드를 호출하면 JPA가 객체와 매핑정보를 보고 적절한 INSERT SQL을 생성해서 DB에 전달합니다.
조회기능
String memberId = "helloId";
Member member = jpa.find(Member.class, memberId); // 조회
find 메소드는 객체 하나를 DB에서 조회합니다. JPA는 객체와 매핑정보를 보고 적절한 SELECT SQL을 생성해서 DB에 전달하고 그 결과로 Member객체를 생성해서 반환합니다.
JPA는 SQL을 개발자 대신 작성해서 실행해주는 것 이상의 기능들을 제공합니다. 그렇기때문에 개발자의 반복작업이 많이줄어들기때문에 JPA를 사용해야한다고 생각합니다.
'IT > JPA' 카테고리의 다른 글
JPA - 엔티티 매니저 (0) | 2022.04.27 |
---|---|
JPA - hibernate.dialect (데이터베이스 방언) (0) | 2022.04.26 |
JPA persistence.xml (0) | 2022.04.26 |
JPA - @Entity, @Table, @Id, @Column (0) | 2022.04.25 |
JPA란 무엇인가? (0) | 2022.04.24 |