반복적인 코드를 계속해서 작성해야함
(1.SQL 작성 - 2. JDBC API로 SQL 실행 - 3. 조회결과를 매핑)
SQL에 의존적인 개발
: DAO를 사용해서 SQL을 숨겨도 DAO를 직접 실행해서 SQL을 확인해야한다.
-> SQL에 의존적인 개발을 할 수 밖에없다.
SQL에 의존적이므로 진정한 의미의 계층분할이 어렵다
-> JPA를 통해서 SQL에 의존적인 부분을 제거할 수 있다.
EX)
jpa.persist(member); //저장
String memberId = "helloId";
Member member = jpa.find(Member.class, memberId); //조회
객체지향 프로그래밍과 데이터 베이스 각각의 패러다임.
정의
객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악
- 추상화, 캡슐화, 정보은닉, 상속, 다형성 등 의 주요개념.
- SOLID
데이터 베이스
정의
여러 사람이 공유하여 사용할 목적으로 체계화해 통합, 관리하는 데이터의 집합이다. 작성된 목록으로써 여러 응용 시스템들의 통합된 정보들을 저장하여 운영할 수 있는 공용 데이터들의 묶음
- 데이터 중심으로 구조화, 집합적인 사고를 요함
- 데이터를 빠르게 조회하는 것이 주된 목적.
-> 둘의 목적과 패러다임이 다르기 때문에 객체지향을 DB에 적용시키려면 개발자가 중간에서 해결해야함!
INSERT INTO ITEM - - -
INSERT INTO ALBUM - - -
SELECT FROM ITEM, ALBUM - - -
JOIN - - - 조건
//저장
jpa.persist(album);
//조회
String albumId="100id";
Album album=jpa.find(Album.class,albumId);
public Member find(String memberId){
//SQL 실행
Member member = new Member();
//DB에서 조회한 회원 정보 입력
Team team = new Team();
//회원과 팀 관계 설정
member.setTeam(team);
return member;
}
//연관관계 설정후 저장
member.setTeam(team);
jpa.persist(member);
정의
참조를 사용해서 연관된 객체를 계속해서 찾아가는 것.
class MemberService{
public void process(){
Member member =memberDAO.find(memberId);
member.getTeam();
member.getOrder.getDelivery();
}
}
class Member {
private Order order;
public Order getOrder(){
return order;
}
}
String memberId="100";
Member member1 = memberDao.getMember(memberId);
Member member2 = memberDao.getMember(memberId);
member1 == member2; //다르다고 나옴.
JPA는 같은 트랜잭션일때 같은 객체가 조회되는 것을 보장한다.
정의
JPA는 자바 진영의 ORM 기술 표준이다. JDBC API를 이용한다.
Object Relational Mapping
객체와 테이블의 패러다임 불일치 문제를 해결해준다.
각 언어마다 대표적인 ORM이 존재한다.
SQL을 대신 생성 & 전달, 패러다임 불일치 문제 해결
자바 언어를 위한 객체 관계 매핑 구현체이다.
Java EE server 없이도 동작한다.
Ex1) 가변문자 : MySQL은 VARCHAR, Oracle은 VARCHAR2
Ex2) 문자열 함수 : SQL표준은 SUBSTRING(), Oracle은 SUBSTR()
EX3) 페이징: MYSQL은 LIMIT, Oracle은 ROWNUM
EntityManagerFactory emf= Persistence.createEntityManagerFactory("jpabook");
EntityManager em = emf.createEntityManager();
em.close();
emf.close();
트랙잭션 설명)
데이터베이스 트랜잭션은 일관성 있고 신뢰할 수 있는 방식으로 독립적이게 처리되는 작업 단위를 뜻한다.
데이터베이스 트랜잭션은 크게 두 가지의 목적을 가진다.
1. 예상치 못한 에러가 발생해도 데이터베이스를 신뢰성 있는 상태로 만들 수 있도록 신뢰할 수 있는 작업 단위를 제공한다.
- 데이터베이스에 동시에 접근하는 경우 프로그램 간에 격리를 제공하여 에러를 방지한다.
한 트랜잭션은 커밋되거나 롤백된다.
EntityTranscation tx = em.getTransaction();
try{
tx.begin();
logic(em);
tx.commit();
}catch(Exception e){
tx.rollback();
}
public static void typedQuery(EntityManager em) {
String jpql = "SELECT b FROM Book b ";
TypedQuery<Book> query = em.createQuery(jpql, Book.class);
List<Book> bookList = query.getResultList();
for( Book book : bookList) {
System.out.println(book.getTitle());
}
}