본문 바로가기

Spring

(23)
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..
인텔리 J에 Database 연결해서 사용하기 인텔리 J를 사용하면서 다음과 같이 DB 정보도 한번에 볼 수 있도록 해보자! ( 항상 DB 따로 띄웠었는데... ) ctrl+shift+a 눌러서 Database 검색해서 열어주거나 View - Tool Windows - Database를 클릭해서 창을 연다 그러면 인텔리 J 화면 오른쪽에 DB 정보를 띄울 수 있는 창이 보인다.+누르고, Data source에 연결할 수 있는 DB이 보인다.일단 기본적으로 사용하고 있는 H2를 연결해보고자 한다. 그러면 다음과 같은 창이 뜬다.여기에 db에 대한 정보 값을 입력해주면 된다.값을 입력해준 다음 TEST CONNECTION을 해보자.드라이버 파일이 설치되어있지 않다고 한다.. 드라이버 파일을 설치해주도록 하자.그리고 db정보를 참고해서 연결해주도록 한다...
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 애플리케이션 개발엔티티 매니저 설정 엔티티 팩토리 만들어서 거기서 엔티티 매니저 생성해서 ..

반응형