JPA


JPA

  • オブジェクト関係マッピング(ORM)、
  • ツールは、オブジェクト向けの使いやすさを提供します.
  • Javaオブジェクトとリレーショナルdbアプリケーションのマッピング
  • クエリに比べて、
  • はオブジェクトに重点を置いています.

    Entity

  • JPA自動生成テーブル
  • DB Table == JPA Entity
    Annotation書き込み@Entity指定クラスがEntity、@Tableの名前が@Idprimaryキー値が@ColumnDB列、@GenerateValueのポリシー設定を指定
    package com.example.jpa.model.entity;
    
    import lombok.Data;
    import lombok.RequiredArgsConstructor;
    
    import javax.persistence.Entity;
    import javax.persistence.Id;
    import java.time.LocalDateTime;
    
    @Data
    @Entity
    @RequiredArgsConstructor
    //@AllArgsConstructor  모든 매개변수가 들어가는 생성자
    public class User {
    
        @Id
        private Long id;
    //    @Column(name = "account") db와 이름이 같은 변수명으로 선언하면 jpa에서 자동으로 매칭해준다
        private String account;
        private LocalDateTime createdTime; // db에서 created_time인데 jpa에서 자동으로 매칭
        private String updatedTime;
        private String email;
    
    }
    

    public interface UserRepository extends JpaRepository<User, Long>


    extends JpaRepository

    entity

    package com.example.jpa.model.entity;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import java.time.LocalDateTime;
    
    @Data
    @Entity
    @NoArgsConstructor // 기본생성자
    @AllArgsConstructor  //모든 매개변수가 들어가는 생성자
    public class User {
    
       @Id
       @GeneratedValue(strategy = GenerationType.IDENTITY)
       private Long id;
    //    @Column(name = "account") db와 이름이 같은 변수명으로 선언하면 jpa에서 자동으로 매칭해준다
       private String account;
       private LocalDateTime createdTime; // db에서 created_time인데 jpa에서 자동으로 매칭
       private String updatedTime;
       private String email;
    
    }
    

    test code

     package com.example.jpa.repository;
    
    import com.example.jpa.JpaApplication;
    import com.example.jpa.model.entity.User;
    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    
    import java.time.LocalDateTime;
    
    @SpringBootTest
    public class UserRepositoryTest extends JpaApplication {
    
        // DI
        @Autowired
        private UserRepository userRepository;
    
        @Test
        public void create(){
            User user = new User();
    
            user.setAccount("test01");
            user.setCreatedTime(LocalDateTime.now());
            user.setEmail("[email protected]");
    
            System.out.println(user.toString());
    
            userRepository.save(user);
        }

    DBに保存されていることを確認できます.
    application.propertyファイルのspring.jpa.show-sql=trueをに設定すると、実行したsql文をコンソールウィンドウで表示できます.

    @Transactional


    データベースに対してクエリーを実行しても、最後にロールバックされます.
    DBに適用せずにクエリ実行結果を表示するときに使用できます.