loading

새소식

Framework/Springboot

[Springboot] 스프링부트 JPA

  • -
728x90
반응형

▶ JPA : Java Persistence API

 (1) ORM 프레임워크 (Object Relational Mapping) : 객체는 객체대로, 관계형 데이터베이스는 관계형 데이터베이스대로 설계

 (2) 특징

   1) DAO와 Database Table 의 강한 의존성 문제 해결

   2) Model(자바 클래스)을 작성하면 자동으로 Table 생성 

   3) SQL 문장을 이용하지 않고 메소드를 호출하면 자동으로 SQL 문장 실행

 (3) 장점 : 생산성 향상, 유지보수, 특정 벤더(DB)에 종속직이지 않음.

 (4) Dialect 

    1) 각각의 데이터베이스가 제공하는 SQL 문법과 함수는 조금씩 다름

            ex) MySQL → VARCHAR, INT, LIMIT, ... Oracle → VARCHAR2, NUMBER, ROWNUM, ... 

    2) 데이터베이스의 종류에 따라서 문법에 맞는 SQL 실행

 (5) Table 생성 옵션

 (6) Mapping Annotation

   1) @Entity

     - JPA 가 관리할 객체

     -  @Id 를 사용하여 데이터베이스 Primary Key와 매핑할 필드를 반드시 지정해야된다.

 

   2) @Id

     - 개발자가 Key 를 직접 생성(@Id)

     -  데이터베이스가 자동으로 생성( @Id + @GeneratedValue)  

          (@GeneratedValue : 데이터 입력시 자동으로 순번을 생성(필수 X))

   3) @Table

     - Entity 와 매핑할 테이블

     - 생략 시 Entity 이름을 테이블 이름으로 사용

 

   4) @Column

     - 컬럼과 관련된 속성 지정

     - name, nullable, length 속성을 자주 사용

     - 생략시 기본 자료형 = not null, 참조 자료형 = nullable 로 지정되며 변수명과 동일한 컬럼을 생성

          (CamleCase 적용시 UnderScore 로 변경)

 

   5) @Enumerated : 열거형 데이터

     - EnumType.ORDINAL : 순서 (0, 1, 2, ...)

     - EnumType.STRING : 이름 (SUN, MON, ...)

 

   6) @Temporal : 날짜 데이터

     - TemporalType.DATE : 2012-03-25

     - TemporalType.TIME : 11:00:00

     - TemporalType.TIMESTAMP : 2012-03-25 11:00:00

 

   7) @Lob : 대용량 데이터 (Large Object)

     - CLOB : String, char[], java.sql.CLOB

     - BLOB : byte[], java.sql.BLOB

 

   8) @Transient : 매핑되지 않는 데이터

     - DB에 저장하거나 조회가 필요없는 데이터(Springboot 에서 변수를 생성하지만 데이터 속성으로 넣지 않을 것들)

                ex) 비밀번호 확인, 가입 시 약관에 동의

                ex) 회원가입 로직에서 비밀번호 확인 에 들어갈 데이터를 정의할 변수

   9) @ModelAttribute : HTTP Body 내용과 HTTP 파라미터의 값들을 Getter, Setter, 생성자를  통해 주입하기 위해 사용

     => Primary Key 가 동일하고 다른 속성값들을 변경 후 입력하면 데이터 값이 수정된다.

 

 ▶ 연관관계

 - 방향 : 단방향, 양방향

 - 다중성 : 일대일(1:1), 일대다(1:n),다대다,(m:n)

 - 연관관계의 주인 : 양방향일때 주인을 지정

 - @JoinColumn : 외래키 지정 (생략 시 기본 설정에 의해 컬럼명 생성 =>"필드명 + 참조하는 테이블의 컬럼명"

 - @ManyToOne (다대일) : 단방향

 

 - @ManyToOne <-> @OnetoMany (다대일) - (일대다) : 양방향

 

 

728x90
반응형
Contents

📝 포스팅 주소를 복사했습니다 📝

이 글이 도움이 되었다면 공감 부탁드립니다👍