SpringDataJpa 주해--공부는 꾸준해야 돼-나는 반드시 성공한다

19422 단어
SpringDataJpa 메모
  • SpringDataJpa 메모
  • @Query
  • @Modifying
  • @Entity
  • @Column
  • @Id
  • @GeneratedValue
  • @OneToMany
  • @JoinColumn
  • @ManyToOne
  • @Transactional
  • @ManyToMany
  • @JoinTable


  • 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는 키의 생성 정책을 제공합니다.
  • 주석에는 두 가지 속성이 있는데 그것이 바로 strategy(GenerationType 유형)와generator(String 유형)generator 속성의 값이다. 기본값은''이다. 이것은 키 생성기의 이름(같은 이름의 키 생성기에 대응하는 @ SequenceGenerator와 @TableGenerator)strategy 속성: 네 가지 값을 제공한다.
  • AUTO 메인 키는 프로그램이 제어하는 기본 옵션입니다. 설정하지 않으면 이렇습니다. 적당한 정책을 자동으로 선택합니다
  • IDENTITY는 데이터베이스 ID가 스스로 증가하는 방식으로 메인 키 필드에서 나온다. Oracle은 이런 방식을 지원하지 않기 때문에 mysql
  • 에 적합하다.
  • SEQUENCE는 데이터베이스 시퀀스를 통해 메인 키를 생성하고 MYSQL은 지원하지 않으며oracle에 적합합니다.@SequenceGenerator 메모를 통해 시퀀스 이름 지정
  • Table는 테이블을 통해 메인 키를 생성하고 프레임워크는 테이블의 아날로그 서열을 빌려 메인 키를 생성하며 이 정책을 사용하면 데이터베이스 이식이 더욱 쉽다.

  • @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<>();
    

    좋은 웹페이지 즐겨찾기