EntityとRepositoryの作成とテスト


1.Entityの作成


事前に作成されたERDに基づいてドメインを作成
@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Todo extends BaseEntity {
    @Id @GeneratedValue
    private Long seq;

    @Builder
    public Todo(String name, String content, TodoStatus status, Integer predictedPomo, Integer realPomo, WorkProficiency workProficiency, WorkType workType, WorkImportance workImportance) {
        this.name = name;
        this.content = content;
        this.status = status;
        this.predictedPomo = predictedPomo;
        this.realPomo = realPomo;
        this.workProficiency = workProficiency;
        this.workType = workType;
        this.workImportance = workImportance;
    }

		@ManyToOne(fetch = FetchType.LAZY)
		@JoinColumn(name="group_seq")
    private Group group;

    private String name, content;
    private TodoStatus status;

    private Integer predictedPomo, realPomo;

    private WorkProficiency workProficiency;
    private WorkType workType;
    private WorkImportance workImportance;
}

[ Annotation ]

  • @Entity:テーブルに対応するクラス
  • デフォルトジェネレータが必要です!→JPAエンティティオブジェクトの作成時にデフォルト作成者
  • を使用する
  • @Getter:Lombokライブラリを使用したGetterメソッドの作成
  • Setterを使用しない理由:任意のポイントでSetter関数を呼び出してEntityの値を変更できる場合、変更の意図を特定するのは難しい→意図を特定できる関数を作成して呼び出す
    ( More: https://yoonbing9.tistory.com/28 )
  • @Id:プライマリ・キーのマッピング
  • @GeneratedValue,自動生成
  • @Builder:エンティティオブジェクト作成者を適用→ジェネレータモード
    パラメータが
  • の場合、オブジェクト
  • を安全に作成できます.
    任意の順序のオブジェクトを作成可能

  • [関連マッピング]


    Todoとグループの関係は一方向N:1
  • ManyToOne
  • は、多対一の関係のマッピング情報
  • を表す.
  • fetch = fetchType.LAZY
    クエリー
  • ToDoの場合、クエリー・グループのクエリーは生成されず、グループを使用する観点からProxyクエリー
  • JoinColumn(name=”team_seq”)
    マッピングする外部キーの名前を指定して
  • を作成
  • More: https://private-space.tistory.com/87
  • 2.レポートの作成

    public interface TodoRepository extends JpaRepository<Todo, Long> {}
    JPA Repositoryを継承するインタフェースの作成
  • JPARepository
  • CRUDメソッド
  • を提供する
  • の方法で命名規則に従って命名する場合、JPAは名称を分析し、適切なJPQL
  • を実行する.

    3.Repositoryユニットのテスト

    @DataJpaTest
    @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
    class TodoRepositoryTest {
        @Autowired
        private TodoRepository todoRepository;
    
        @Test
        void testCreateTodo() {
            // given
            Todo todo = Todo.builder()
                    .name("할일")
                    .content("내용")
                    .predictedPomo(1)
                    .realPomo(1)
                    .status(TodoStatus.TODO)
                    .workImportance(WorkImportance.LOWER)
                    .workProficiency(WorkProficiency.ADVANCED)
                    .build();
    
            // when
            Todo savedTodo = todoRepository.save(todo);
    
            // then
            assertThat(savedTodo.getName()).isEqualTo("할일");
            assertThat(savedTodo.getContent()).isEqualTo("내용");
            assertThat(savedTodo.getPredictedPomo()).isEqualTo(1);
            assertThat(savedTodo.getRealPomo()).isEqualTo(1);
            assertThat(savedTodo.getStatus()).isEqualTo(TodoStatus.TODO);
            assertThat(savedTodo.getWorkImportance()).isEqualTo(WorkImportance.LOWER);
            assertThat(savedTodo.getWorkProficiency()).isEqualTo(WorkProficiency.ADVANCED);
        }
    }