SpringDataJpa 주해--공부는 꾸준해야 돼-나는 반드시 성공한다
SpringDataJpa 메모
인터페이스 방법은dao 인터페이스에 정의되어야 하며, 이 인터페이스는 JpaRepository, JpaSpecificationExecutor를 계승해야 한다
public interface MyRepository<T> extends JpaRepository<T, String>, JpaSpecificationExecutor<T> {
}
SpringDataJpa의 Dao 레이어 인터페이스 사양 준수
JpaRepository
기본 CRUD 작업 패키지화
JpaSpecifictionExecutor
복잡한 조회가 봉인되었습니다. (페이지 나누기)
@Query
○ 조회를 대표한다
속성:
value:jpql 문장 또는 sql 문장
nativeQuery: 로컬 쿼리 [false (jpql 문장 사용) 또는true (로컬 쿼리 사용: sql 쿼리 사용) 를 사용할지 여부
//
@Query(value="from Customer where custName=? and custId=?")
public Customer findNameAndId(String name,Long id);
// , 。
@Query(value="from Customer where custName=?2 and custId=?1")
public Customer findNameAndId(Long id,String name);
@Query(value="select * from cat_customer",nativeQuery=true)
public List<Object []>findSql();; 3
@Modifying
query와 함께 사용하고query에서 Jpql 문을 선언합니다.
○ 현재 수행 중인 업데이트 작업
@Query(value="update Customer set custName=? where custId=?")
@Modifying
public Customer findNameAndId(String name,Long id);
@Entity
이class는 실체 클래스이고 기본 orm 규칙을 사용합니다. 즉class명은 데이터베이스 테이블의 테이블 이름이고,class필드명은 테이블의 필드 이름입니다.이 기본 orm 규칙을 바꾸려면 @Table를 사용하여class 이름과 데이터베이스에 있는 테이블 이름의 맵 규칙을 바꾸십시오.
@Entity@Table(name = "his_announcement")
public class AnnouncementEntity extends MyEntity
@Column
실체 클래스의 속성과 데이터 테이블의 필드의 대응 관계를 표시하는 데 사용
속성:
name은 데이터베이스 테이블에 표시된 필드의 이름을 정의합니다.
unique는 이 필드가 유일한 표식인지 여부를 표시합니다. 기본값은false입니다.테이블의 필드에 고유한 ID가 필요한 경우 태그를 사용하거나 @Table 태그의 @UniqueConstraint를 사용할 수 있습니다.
nullable는 이 필드가null값일 수 있는지 여부를 표시합니다. 기본값은true입니다.
insertable는 "INSERT"스크립트를 사용하여 데이터를 삽입할 때 이 필드의 값을 삽입해야 하는지 여부를 표시합니다.
updatable는 UPDATE 스크립트를 사용하여 데이터를 삽입할 때 이 필드의 값을 업데이트해야 하는지 여부를 나타냅니다.sertable와 updatable 속성은 일반적으로 메인 키와 외부 키 등 읽기 전용 속성에 많이 사용됩니다.이러한 필드의 값은 일반적으로 자동으로 생성됩니다.
columnDefinition (대부분의 경우, 거의 사용하지 않음) 은 테이블을 만들 때 이 필드에서 만든 SQL 문장을 나타냅니다. 일반적으로 Entity를 통해 테이블 정의를 만들 때 사용됩니다.즉, DB에 테이블이 작성된 경우 이 속성을 사용할 필요가 없습니다.
테이블은 여러 테이블을 비추는 동안 테이블의 필드를 지정합니다.기본값은 주 테이블의 테이블 이름입니다.
length는 필드의 길이를 나타냅니다. 필드의 유형이 varchar일 때만 이 속성이 유효합니다. 기본값은 255자입니다.
precision과 scale precision 속성과 scale 속성은 정밀도를 나타냅니다. 필드 형식이 더블일 때,precision은 수치의 총 길이를 나타내고,scale는 소수점이 차지하는 위치를 나타냅니다.
@Column(name = "create_datetime", length = 20, nullable = false)
private String createDatetime = DateUtil.getCurrentDateToString();
@Id
실체 클래스의 속성을 데이터베이스에 비추는 키열입니다.이 속성은 일반적으로 속성 성명문 앞에 놓여 있으며 성명문과 동행할 수도 있고 단독 줄에 쓸 수도 있다
@GeneratedValue
@GeneratedValue(generator = "paymentableGenerator")
@OneToMany
일대다 관계 구성
속성:
targetEntity: 상대방 대상의 바이트 코드 대상입니다.
mappedBy: 상대방이 설정한 관계의 속성 이름.(외부 키의 유지보수권을 포기하는 데 사용되며, 관계를 설명하기만 하면 되며, JoinColmn 주석을 달지 않아도 된다) 일반적으로 한 측이 유지보수권을 포기하는 것을 선택한다. 예를 들어 캐릭터 유형이다.
cascade: [CascadeType.ALL(모두), CascadeType.MERGE(업데이트), CascadeType.PERSIST(저장), CascadeType.REMOVE(삭제)] 구성 종속 연결 작업
fetch: [EAGER(즉시 불러오기), LAZY(지연 불러오기)] 관련 대상의 불러오는 방식을 설정합니다
@OneToMany(targetEntity=LinkMan.class)
@JoinColumn(name="lkm_cust_id",referencedColumnName="cust_id")
private Set<LinkMan> linkMans=new HashSet<>();
@OneToMany(mappedBy="customer")
private Set<LinkMan> linkMans=new HashSet<>();
@OneToMany(mappedBy="customer" cascade=CascadeType.ALL)
private Set<LinkMan> linkMans=new HashSet<>();
@JoinColumn
외부 키를 설정합니다.선언 테이블 관계식에 대한 메모와 함께 사용합니다. 예: OneToMany 메모
속성:
name: 외부 키 필드 이름
referencedColumnName: 참조된 마스터 테이블의 키 필드 이름
@OneToMany(targetEntity=LinkMan.class)
@JoinColumn(name="lkm_cust_id",referenceColumnName="cust_id")
private Set<LinkMan> linkMans=new HashSet<>();
@ManyToOne
다대일 관계 구성
속성:
targetEntity: 상대방 대상의 바이트 코드 대상입니다.
mappedBy: 상대방이 설정한 관계의 속성 이름.(외부 키의 유지보수권을 포기하는 데 사용되며, 관계를 설명하기만 하면 되며, JoinColmn 주석을 달지 않아도 된다) 일반적으로 한 측이 유지보수권을 포기하는 것을 선택한다. 예를 들어 캐릭터 유형이다.
cascade: [CascadeType.ALL(모두), CascadeType.MERGE(업데이트), CascadeType.PERSIST(저장), CascadeType.REMOVE(삭제)] 구성 종속 연결 작업
fetch: [EAGER(즉시 불러오기), LAZY(지연 불러오기)] 관련 대상의 불러오는 방식을 설정합니다
@ManyToOne(targetEntity=Customer.class)
@JoinColumn(name="lkm_cust_id",referenceColumnName="cust_id")
private Customer customer;
@Transactional
사무를 배치하다.
기본 자동 롤백
그러므로 **@Rollback(false)**와 함께 사용하면 자동으로 굴러가지 않습니다.
@Transactional
@Rollback(false)
public void testAdd(){
}
@ManyToMany
여러 쌍의 관계를 구성합니다.
속성:
targetEntity: 상대방 대상의 바이트 코드 대상입니다.
mappedBy: 상대방이 설정한 관계의 속성 이름.(외부 키의 유지보수권을 포기하는 데 사용되며, 관계를 설명하기만 하면 되며, JoinColmn 주석을 달지 않아도 된다) 일반적으로 한 측이 유지보수권을 포기하는 것을 선택한다. 예를 들어 캐릭터 유형이다.
cascade: [CascadeType.ALL(모두), CascadeType.MERGE(업데이트), CascadeType.PERSIST(저장), CascadeType.REMOVE(삭제)] 구성 종속 연결 작업
fetch: [FetchType.EAGER(즉시 불러오기), FetchType.LAZY(지연 불러오기)] 관련 대상의 불러오는 방식을 설정합니다.
@ManyToMany(targetEntity=Role.class)
@JoinTable(name="sys_user_role",joinColumns={@JoinColumn(name="sys_user_id",referencedColumnName="user_id")},inverseJoinColumns={@JoinColumn(name="sys_role_id",referencedColumnName="role_id")})
private Set<Role> roles=new HashSet<>();
@JoinTable
ManyToMany 메모와 함께 사용됩니다.
속성:
name: 중간 테이블의 이름
joinColumns: 현재 대상이 중간 테이블에 있는 키를 설정합니다
inverseJoinColumns: 중간 테이블에서 상대방의 키를 설정합니다
@ManyToMany(targetEntity=Role.class)
@JoinTable(name="sys_user_role",joinColumns={@JoinColumn(name="sys_user_id",referencedColumnName="user_id")},inverseJoinColumns={@JoinColumn(name="sys_role_id",referencedColumnName="role_id")})
private Set<Role> roles=new HashSet<>();
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.