JPA-ORM 구성 요소
대부분의 최신 애플리케이션은 관계형 데이터베이스를 사용하여 데이터를 저장합니다. 최근 많은 공급 업체가 데이터 유지 관리에 대한 부담을 줄이기 위해 개체 데이터베이스로 전환했습니다. 이는 객체 데이터베이스 또는 객체 관계형 기술이 저장, 검색, 업데이트 및 유지 관리를 담당하고 있음을 의미합니다. 이 개체 관계형 기술의 핵심 부분은 orm.xml 파일 매핑입니다. xml은 컴파일이 필요하지 않으므로 적은 관리로 여러 데이터 소스를 쉽게 변경할 수 있습니다.
개체 관계형 매핑
ORM (Object Relational Mapping)은 ORM이 무엇이며 어떻게 작동하는지 간략하게 알려줍니다. ORM은 데이터를 개체 유형에서 관계형으로 또는 그 반대로 변환하는 프로그래밍 기능입니다.
ORM의 주요 기능은 개체를 데이터베이스의 데이터에 매핑하거나 바인딩하는 것입니다. 매핑하는 동안 데이터, 데이터 유형 및 다른 테이블의 자체 엔티티 또는 엔티티와의 관계를 고려해야합니다.
고급 기능
Idiomatic persistence : 객체 지향 클래스를 사용하여 지속성 클래스를 작성할 수 있습니다.
High Performance : 그것은 많은 가져 오기 기술과 희망적인 잠금 기술을 가지고 있습니다.
Reliable: 매우 안정적이고 탁월합니다. 많은 산업 프로그래머가 사용합니다.
ORM 아키텍처
다음은 ORM 아키텍처입니다.
위의 아키텍처는 객체 데이터가 3 단계로 관계형 데이터베이스에 저장되는 방법을 설명합니다.
1 단계
첫 번째 단계는 Object data단계에는 POJO 클래스, 서비스 인터페이스 및 클래스가 포함됩니다. 비즈니스 로직 작업 및 속성이있는 주요 비즈니스 구성 요소 계층입니다.
예를 들어 직원 데이터베이스를 스키마로
Employee POJO 클래스는 ID, 이름, 급여 및 지정과 같은 속성을 포함합니다. 그리고 해당 속성의 setter 및 getter 메소드와 같은 메소드.
Employee DAO / Service 클래스에는 직원 생성, 직원 찾기 및 직원 삭제와 같은 서비스 메서드가 포함되어 있습니다.
2 단계
두 번째 단계는 mapping 또는 persistence JPA 공급자, 매핑 파일 (ORM.xml), JPA 로더 및 개체 그리드를 포함하는 단계.
JPA Provider: JPA 플레이버 (javax.persistence)가 포함 된 공급 업체 제품입니다. 예를 들어 Eclipselink, Toplink, Hibernate 등
Mapping file : 매핑 파일 (ORM.xml)에는 POJO 클래스의 데이터와 관계형 데이터베이스의 데이터 간의 매핑 구성이 포함되어 있습니다.
JPA Loader: JPA 로더는 관계형 그리드 데이터를로드 할 수있는 캐시 메모리처럼 작동합니다. POJO 데이터에 대한 서비스 클래스 (POJO 클래스의 속성)와 상호 작용하는 데이터베이스 복사본처럼 작동합니다.
Object Grid: 객체 그리드는 캐시 메모리와 같이 관계형 데이터의 사본을 저장할 수있는 임시 위치입니다. 데이터베이스에 대한 모든 쿼리는 먼저 개체 그리드의 데이터에 영향을줍니다. 커밋 된 후에 만 주 데이터베이스에 영향을줍니다.
3 단계
세 번째 단계는 관계형 데이터 단계입니다. 비즈니스 구성 요소에 논리적으로 연결된 관계형 데이터를 포함합니다. 위에서 설명한 것처럼 비즈니스 구성 요소가 데이터를 커밋 할 때만 데이터가 물리적으로 데이터베이스에 저장됩니다. 그때까지 수정 된 데이터는 그리드 형식으로 캐시 메모리에 저장됩니다. 데이터를 얻는 과정도 마찬가지입니다.
위의 세 단계의 프로그래밍 방식 상호 작용 메커니즘을 개체 관계형 매핑이라고합니다.
Mapping.xml
mapping.xml 파일은 Entity 클래스를 데이터베이스 테이블과 매핑하도록 JPA 공급 업체에 지시하는 것입니다.
네 가지 속성을 포함하는 Employee 엔터티의 예를 살펴 보겠습니다. Employee 엔티티의 POJO 클래스Employee.java 다음과 같다:
public class Employee {
private int eid;
private String ename;
private double salary;
private String deg;
public Employee(int eid, String ename, double salary, String deg) {
super( );
this.eid = eid;
this.ename = ename;
this.salary = salary;
this.deg = deg;
}
public Employee( ) {
super();
}
public int getEid( ) {
return eid;
}
public void setEid(int eid) {
this.eid = eid;
}
public String getEname( ) {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public double getSalary( ) {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public String getDeg( ) {
return deg;
}
public void setDeg(String deg) {
this.deg = deg;
}
}
위의 코드는 Employee 엔터티 POJO 클래스입니다. eid, ename, salary 및 deg의 네 가지 속성이 있습니다. 이러한 속성이 데이터베이스의 테이블 필드이고 eid가이 테이블의 기본 키임을 고려하십시오. 이제이를위한 최대 절전 매핑 파일을 설계해야합니다. 이름이 지정된 매핑 파일mapping.xml 다음과 같다:
<? xml version="1.0" encoding="UTF-8" ?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm
http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
version="1.0">
<description> XML Mapping file</description>
<entity class="Employee">
<table name="EMPLOYEETABLE"/>
<attributes>
<id name="eid">
<generated-value strategy="TABLE"/>
</id>
<basic name="ename">
<column name="EMP_NAME" length="100"/>
</basic>
<basic name="salary">
</basic>
<basic name="deg">
</basic>
</attributes>
</entity>
</entity-mappings>
엔티티 클래스를 데이터베이스 테이블과 매핑하기위한 위의 스크립트입니다. 이 파일에서
<entity-mappings> : 태그는 xml 파일에 엔티티 태그를 허용하는 스키마 정의를 정의합니다.
<description> : 태그는 애플리케이션에 대한 설명을 정의합니다.
<entity>: 태그는 데이터베이스에서 테이블로 변환하려는 엔티티 클래스를 정의합니다. 속성 클래스는 POJO 엔티티 클래스 이름을 정의합니다.
<table>: 태그는 테이블 이름을 정의합니다. 클래스 이름을 테이블 이름으로 유지하려면이 태그가 필요하지 않습니다.
<attributes> : 태그는 속성 (테이블의 필드)을 정의합니다.
<id>: 태그는 테이블의 기본 키를 정의합니다. 그만큼<generated-value> 태그는 자동, 수동 또는 시퀀스에서 가져온 것과 같은 기본 키 값을 할당하는 방법을 정의합니다.
<basic> : 태그는 테이블의 나머지 속성을 정의하는 데 사용됩니다.
<column-name> : 태그는 사용자 정의 테이블 필드 이름을 정의하는 데 사용됩니다.
주석
일반적으로 Xml 파일은 특정 구성 요소를 구성하거나 두 가지 구성 요소 사양을 매핑하는 데 사용됩니다. 우리의 경우 프레임 워크에서 xml을 별도로 유지해야합니다. 즉, 매핑 xml 파일을 작성하는 동안 POJO 클래스 속성을 mapping.xml 파일의 엔티티 태그와 비교해야합니다.
해결책은 다음과 같습니다. 클래스 정의에서 주석을 사용하여 구성 부분을 작성할 수 있습니다. 주석은 클래스, 속성 및 메서드에 사용됩니다. 주석은 '@'기호로 시작합니다. 주석은 클래스, 속성 또는 메서드가 선언되기 전에 선언됩니다. JPA의 모든 주석은 javax.persistence 패키지에 정의되어 있습니다.
다음은 예제에 사용 된 주석 목록입니다.
주석 | 기술 |
---|---|
@실재 | 이 주석은 클래스를 엔티티 또는 테이블로 선언하도록 지정합니다. |
@표 | 이 주석은 테이블 이름을 선언하도록 지정합니다. |
@기본 | 이 주석은 비 제약 필드를 명시 적으로 지정합니다. |
@Embedded | 이 주석은 포함 가능한 클래스의 값 인스턴스를 갖는 클래스 또는 엔티티의 속성을 지정합니다. |
@신분증 | 이 주석은 클래스의 ID (테이블의 기본 키)에 사용되는 속성을 지정합니다. |
@GeneratedValue | 이 주석은 자동, 수동 또는 시퀀스 테이블에서 가져온 값과 같은 ID 속성을 초기화 할 수있는 방법을 지정합니다. |
@과도 현상 | 이 주석은 영구적이지 않은 속성, 즉 값이 데이터베이스에 저장되지 않는 속성을 지정합니다. |
@기둥 | 이 주석은 지속성 속성에 대한 열 또는 속성을 지정하는 데 사용됩니다. |
안녕하세요. | 이 주석은 @GeneratedValue 주석에 지정된 속성 값을 정의하는 데 사용됩니다. 시퀀스를 생성합니다. |
@TableGenerator | 이 주석은 @GeneratedValue 주석에 지정된 속성에 대한 값 생성기를 지정하는 데 사용됩니다. 가치 창출을위한 테이블을 생성합니다. |
@AccessType | 이 유형의 주석은 액세스 유형을 설정하는 데 사용됩니다. @AccessType (FIELD)을 설정하면 Field wise 액세스가 발생합니다. @AccessType (PROPERTY)을 설정하면 Property 현명한 평가가 발생합니다. |
뿡 빵뀨 | 이 주석은 엔티티 연관 또는 엔티티 콜렉션을 지정하는 데 사용됩니다. 이것은 다 대일 및 일대 다 연결에 사용됩니다. |
안녕하세요. | 이 주석은 1 차 또는 2 차 테이블에 대한 필드, 고유 제한 조건을 지정하는 데 사용됩니다. |
@ColumnResult | 이 주석은 select 절을 사용하는 SQL 쿼리의 열 이름을 참조합니다. |
헉헉 | 이 어노테이션은 조인 테이블 간의 다 대다 관계를 정의하는 데 사용됩니다. |
뿡 빵뀨 | 이 어노테이션은 조인 테이블 간의 다 대일 관계를 정의하는 데 사용됩니다. |
뿡 빵뀨 | 이 어노테이션은 조인 테이블 간의 일대 다 관계를 정의하는 데 사용됩니다. |
@1-1 | 이 어노테이션은 조인 테이블 간의 일대일 관계를 정의하는 데 사용됩니다. |
@NamedQueries | 이 주석은 명명 된 쿼리 목록을 지정하는 데 사용됩니다. |
@NamedQuery | 이 주석은 정적 이름을 사용하여 쿼리를 지정하는 데 사용됩니다. |
Java Bean 표준
Java 클래스는 인스턴스 값과 동작을 단일 단위 호출 객체로 캡슐화합니다. Java Bean은 임시 저장소이며 재사용 가능한 구성 요소 또는 객체입니다. 인스턴스 속성을 개별적으로 초기화하는 기본 생성자 및 getter 및 setter 메서드가있는 직렬화 가능한 클래스입니다.
콩 규약
Bean은 기본 생성자 또는 직렬화 된 인스턴스를 포함하는 파일을 포함합니다. 따라서 빈은 빈을 인스턴스화 할 수 있습니다.
빈의 속성은 부울 속성과 부울이 아닌 속성으로 분리 될 수 있습니다.
부울이 아닌 속성에는 다음이 포함됩니다. getter 과 setter 행동 양식.
부울 속성 포함 setter 과 is 방법.
Getter모든 속성의 메서드는 소문자 'get'(자바 메서드 규칙)으로 시작하고 대문자로 시작하는 필드 이름으로 계속되어야합니다. 예를 들어 필드 이름은 'salary'이므로이 필드의 getter 메서드는 'getSalary ()'입니다.
Setter모든 속성의 메서드는 소문자 'set'(자바 메서드 규칙)으로 시작해야하며 대문자로 시작하는 필드 이름과 field로 설정할 인수 값으로 계속되어야합니다. 예를 들어 필드 이름은 'salary'이므로이 필드의 setter 메서드는 'setSalary (double sal)'입니다.
Boolean 속성의 경우 true인지 false인지 확인하는 방법입니다. 예를 들어 Boolean 속성 'empty',이 필드의 is 메서드는 'isEmpty ()'입니다.