목록Programming (58)
Be ready to study forever - 개발자 꿈나무
JPQL이란?) SQL쿼리가 DB중심이라면 JPQL은 객체가 중심으로 쿼리를 짤 수 있다. JPQL은 내부적으로 SQL방언에 맞게 해석해서 쿼리로 날려준다. 따라서, 특정 데이터베이스 SQL에 의존하지 않는다. 실제 쿼리를 비교해 보면 //검색 String jpql = "select m from Member m where m.age > 18"; List result = em.createQuery(jpql, Member.class) .getResultList(); //실행된 SQL select m.id as id, m.age as age, m.USERNAME as USERNAME, m.TEAM_ID as TEAM_ID from Member m where m.age>18 JQPL의 기본문법) JPQL은 AN..
JPA의 데이터 타입 분류 JPA에서 분류하는 데이터 타입은 크게 볼 때 2가지가 있는데, 엔티티타입과 값타입이다. 값타입은 엔티티 객체에 속해 있는 값이라고 할 수 있다.(밑에 그림을 보면 이해가 아주 쉬움) 엔티티타입 - @Entity로 정의되어 있는 객체 - Id값이 있어서 추적이 가능 값타입 - 식별자가 없어서 값이 변해도 추적 X - 자바에서 쓰이는 primitive type(int, double)이나 wrapper 클래스(Integer, Long, String) 값타입을 자세히 살펴보면 3가지로 나눌 수 있는데, 기본값타입, 임베디드 타입, 컬렉션 값 타입으로 나눌 수 있다. 큰 그림을 그림으로 보자면 엔티티타입(Entity type)과 값타입(value type)이 있고 값타입 밑에는 기본 ..
앤티티를 매핑하는 방법 엔티티를 매핑할 때에는 어노테이션을 사용해서 매핑한다. 엔티티를 매핑할 때 사용하는 어노테이션들은: - 객체와 테이블 매핑: @Entity, @Table - 필드와 컬럼 매핑: @Column - 기본키(Primary Key) 매핑: @Id - 연관관계 매핑:@ManyToOne, @JoinColumn 등이 있다. 좀 더 세세하게 들어가 보자면 객체와 테이블 매핑) 객체와 테이블 매핑 어노테이션은 클래스 위에다 적어준다. @Entity @Entity가 붙은 클래스는 JPA가 관리하는 엔티티라고 할수 있다. 즉 이 어노테이션이 붙은 엔티티는 DB의 태이블과 매핑이 된다. 그리고 자동적으로 객체의 이름(camelCase)가 DB의 이름(snake_case)에 매핑 된므로 카멜케이스와 스네..
객체지향의 상속을 관계형 DB에서는 어떻게 표현할 수 있을까? 관계형 DB에서는 그나마 상속과 비슷하게 구현하는 방법은 슈퍼타입과 서브타입 모델링을 사용하여 구현할 수 있다. 그림과 같이 서브타입 테이블에 기본키에 외래키를 걸어버리면 1:1관계가 성립하면서 조인을 해서 두 테이블을 상속관계처럼 사용할 수 있다. 그렇지만, 다른 전략으로도 객체의 상속관계를 관계형DB에 표현할 수 있는데, 3가지 전략이 있다 - 조인전략(JOINED) - 단일 테이블 전략(SIGNLE_TABLE) - 구현 클래스마다 테이블 생성 전략(TABLE_PER_CLASS) 상속 매핑하는 방법) 이것 역시 어노테이션을 활용한다. 총 3가지 어노테이션이 있는데: @Inheritance(strategy=InheritanceType.XXX..
연관관계를 매핑할 때 고려해야할 것 3가지는: - 다중성(1:N, N:1, 1:1, N:M) - 단방향, 양방향 - 연관관계 주인 인데, 조합을 따져보면 N:1 단방향 (@ManyToOne) N:1 양방향 (@ManyToOne @OneToMany) 1:N 단방향 (@OneToMany) 1:N 양방향 (@OneToMany @ManyToOne) 1:1 양방향 (@OneToOne @OneToOne) N:M 양방향 (@ManyToMany @ManyToMany) 정도의 관계가 나올 수 있다. 관계가 나올 수 있는 조합이 많아서 특징별로 다 외워야 하나… 라고 생각 할 수도 있지만, 몇 가지 주의할 만한 관계를 제외하고는 원칙은 같다. 연관관계의 주인은 @ManyToOne쪽이 가져 가는게 맞다고. 그리고 설계시에 ..
연관관계 매핑 JPA 소개에서도 이야기 했지만,객체와 엔티티의 가장 큰 차이점 중 히나가 바로 연관관계이다. 객체는 단뱡향 연결을 양쪽에서 해야 양방향 연결 이지만, 엔티티는 외래키를 이용해서 양방향으로 엔티티 끼리 연결이 가능하다. 따라서, 객체를 양방향으로 연결 한다면, 객체의 주인을 정해 주어야 한다. 그림을 보면서 이해하자면 객체Member와 Team은 서로 참조해서 양방향으로 연결 되어 있다. 이경우에는 사실 Memeber객체에 Team필드를 setTeam()으로 설정한다 해도 Team객체에 List members 필드에는 반영되지 않는다. 반대로 Team객체에 members를 members.add()한다해도 Memeber객체에 team필드가 업데이트 되지 않는다. 그러므로 연관관계 주인을 정해..
영속성 컨텍스트란? 영속성 컨택스트란 논리적 개념으로 JPA를 이해하는데 아주 핵심적인 개념이다. 영속성 컨탠스트는 DB에도 값을 저장하지만 자바 어플리케이션 내에도 영속성 컨택스트로 따로 데이터를 보관하게 된다. 이렇게 보관된 데이터는 영속성 컨텍스트의 관리를 받는다 라고 할 수 있다. 영속성 컨택스트에 접근하는 방법은 EntityManager로 접근하는데, 코드로 살펴보자면 EntityManagerFactory emf = Psersistence.createEntityManagerFactory("name"); //Static Method로 단 하나의 EntityManagerFactory만 생성 EntityManager em = emf.createEntityManager(); //EntityManager..
1.JPA특징 데이터베이스 방언 JPA는 특정한 데이터베이스 밴더에 종속되지 않는다. 따라서 특정 밴더의 데이터베이스를 방언(Dialect)라고 하며 persistence.xml 설정값으로 데이터베이스 방언(방언이란 예를 들면 varchar 와 varchar2의 차이 처럼 특정한 DB에서만 사용하는 Query문법을 방언이라고 함). 을 고를수 있다. JPA는 40개의 방언을 지원하니까 거의 모든 메이저한 데이터베이스는 지원한다고 보는게 맞다 JPA구동방식 META-INF아래에 있는 persistence.xml에 정의해둔 설정을 읽어서 EntityManagerFactory를 생성하게 된다. 이 EntityManagerFactory는 EntityManager를 생성하게 되는데 EntityManager는 쉽게..
1. JPA의 등장배경 왜 JPA가 등장하게 되었지? Java의 객체지향 패러다임과 관계형 DB의 패러다임의 차이 때문에 개발자들은 항상 객체지향적인 코드를 짜기 보다 관계형 DB에 맞게 매핑하는 방법을 중심으로 코드를 짜게 되었다. 그로 인해 객체지향 언어인 자바를 객체지향적으로 활용할 수가 없는 일이 생겼다. 예를 들면, 객체를 상속하거나, 그래프 탐색, 컬랙션에 담아서 관리 하는 등을 할 수가 없었다. 이러한 괴리를 보안하기 위해서 JAVA 어플리케이션과 JDBC사이에서 매핑해주는 JPA가 등장 하게 되어따… 그림과 같이 JDBC와 Java어플리케이션 사이에서 객체와 관계형DB를 매핑해준다. 사실 JPA는… JPA는 사실 인터페이스의 모음이고 구현체는 Hibernate, EclipseLink, Da..
주석 #로 시작하며 #가해당하는 줄은 모두 주석처리 번수 선언 - 변수명=데이터(띄워쓰기 안됨) 사용 - $변수명 **php의 문법과 유사함 리스트형 변수(배열) 선언 – 변수명=(데이터1 데이터2 데이터3) **보통의 프로그래밍 언어 문법과 다르게 데이터 간에 쉼표(,)대신에 띄어쓰기 사용 사용 - ${변수명[인덱스]} 사전 정의된 지역변수들 파라미터 전달은 쉘 스크립트 실행시에 한다 ./test.sh param1 param2 10 20 30 $1 $2 $3 $4 $5 ->이와 같은 형태로 순서대로 내부에서 사용가능 연산자 expr를 사용하여 숫자를 계산할 수 있다. 이때에는 ``(작은따옴표 아님)를 사용하여 감싸야한다. 그리고 연산자 * 와 ( ) 앞 에는 \(역슬레시)를 써 주어야 한다. 그리고, ..