본문 바로가기

Spring/JPA

(11)
JPA 기반 프로젝트 JPA 기반 프로젝트Spring Data JPA스프링 데이터 JPA 적용 전반복되는 CRUDpublic class MemberRepository{ public void save(Member member) {...} public Member findOne(Long id) {...} public List findAll() {...} public Member findByUsername(String username) {...} } public class ItemRepository{ public void save(Item item) {...} public Member findOne(Long id) {...} public List findAll() {...} }CRUD하는 게 다~ 비슷-비슷하다. -자동화 하고 싶..
JPA 객체지향쿼리 - JPQL JPA와 객체지향 쿼리JPA는 다양한 쿼리 방법을 지원JPQL-가장 단순한 조회 방법. -JPA에서 제공하는 공식 쿼리. ANSI 표준과 거의 비슷함 -JPA를 사용하면 엔티티 객체를 중심으로 개발 -문제는 검색 쿼리. 검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색! -모든 DB데이터를 객체로 변환해서 검색하는 것은 불가능 → 검색 조건이 포함 된 SQL 필요-JPQL은 엔티티 객체를 대상으로 쿼리 ↔ SQL은 데이터베이스 테이블을 대상으로 쿼리//검색 String jpql = "select m from Member m where m.name like '%hello$'"; List result = em.createQuery(jpql, Member.class).getResultList();Me..
JPA 내부 구조. 영속성 컨텍스트 JPA에서 가장 중요한 2가지ORM. 객체와 관계형 데이터베이스 매핑 영속성 컨텍스트엔티티 매니저 팩토리와 엔티티 매니저 엔티티 매니저 팩토리에서 유저에서 요청 올 때 마다 엔티티 매니저를 별도로 만들어준다. 이 엔티티 매니저는 JDBC에서 제공하는 커넥션 풀을 사용해서 DB와 연결된다. 영속성 컨텍스트"엔티티를 연구 저장하는 환경"이라는 뜻EntityManager.persist(entity); 영속성 컨텍스트는 논리적인 개념! 엔티티 매니저를 통해 영속성 컨텍스트에 접근한다. 엔티티의 생명주기비영속, 영속, 준영속, 삭제비영속(new/transient)member 객체를 생성했어. 생성만 하고 JPA에 안 집어넣었어. 이 상태를 비영속 상태라고 한다.//객체를 생성한 상태(비영속) Member memb..
JPA 연관관계 매핑 -양방향 매핑 양방향 연관관계객체에서 Member에서 Team으로 이동하고, Team에서 Member를 불러올 수 있도록 만들고 싶다. 좀 더 객체 지향적으로! 단 DB 바뀌지 않는다. DB는 방향x Member에 Team team을 만들고 Team에 List members를 만든다. (1대 다니까) @Entity public class Team{ @Id @generatedValue(strategy=GenerationType.AUTO) private Long id; private String name; @OneToMany(mappedBy = "team") List members = new ArrayList(); ... }반대의 일을 할 수 있음!다시 Main으로 와서 코드를 짜보자.Team findTeam = em.f..
JPA 연관관계 매핑-단방향 매핑 '객체지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것이다.' -조영호(객체지향의 사실과 오해) 객체를 테이블에 맞추어 모델링 (연관관계가 없는 객체) 실무에선 이렇게 많이 쓰더라.. teamId 꺼내서 다시 Team에서 조회한다. 객체 연관관계가 없다. 실무에선 왜 이런 식으로 쓰게 되는걸까? 객체를 테이블에 맞추어 모델링하면 어떤 장점이 있을까????위 그림처럼 만들어보자.Member.java@Column(name = "TEAM_ID") private Long teamId;Team.java@Entity public class Team{ @Id @GeneratedValue(strategy= GenerationType.AUTO) private Long id; private String nam..
JPA 필드와 칼럼 매핑 필드와 컬럼 매핑데이터베이스 스키마 자동 생성하기-DDL을 애플리케이션 실행 시점에 자동 생성(JPA 통해서 직접 테이블 만들 수 있다)-테이블 중심 → 객체 중심-데이터베이스 방언을 활용해서 데이터베이스에 적절한 DDL 생성-이렇게 생성된 DDL은 개발 장비에서만 사용 (운영에서 JPA가 테이블 드랍하고, 만들고? 큰일 날 지도.)-생성된 DDL은 운영서버에서는 사용하지 않거나, 적절히 다듬은 후 사용해야 함. 데이터베이스 스키마 자동 생성하기-hibernate.hbm2ddl.auto create: 기존 테이블 삭제 후 다시 생성 (DROP + CREATE)(운영x) create-dorop: create와 같으나 종료시점에서 테이블 DROP(운영x) update: 변경분만 반영(운영x) validate..
JPA persistence.xml과 라이브러리 설정 pom.xml org.hibernate hibernate-entitymanager 5.4.9.Final 연습용 데이터베이스 h2 라이브러리 불러오기를 계속 실패해서 그냥 직접 불러다 쓰기러 했다. h2 폴더에 jar파일 있었고, 그걸 가져와서 쓰기로 했음!File- Project Structure 여기에 Libraries를 관리할 수 있는 탭이 있다.라이브러리에 hibernate-core 들어오게 된다.persistence.xmlresources > META-INF > persistence.xml로 관리 해당 포스팅은 T아카데미에서 진행한 김영한 강사님의 JPA 유튜브 강의를 듣고 정리한 것입니다 : ) https://www.youtube.com/watch?v=WfrSN9Z7MiA&list=PL9mhQY..
JPA 기초와 매핑 : 실습 maven projects에 만들고 멤버 정보를 담는 객체package reJPA.entity; import javax.persistence.*; @Entity public class Member { @Id private Long id; private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } persistence.xml 애플리케이션 개발엔티티 매니저 설정 엔티티 팩토리 만들어서 거기서 엔티티 매니저 생성해서 ..

반응형