본문으로 바로가기

Spring Data Jpa @ManyToOne 양방향 Mapping하기


Spring Data Jpa는 굉장히 괜찮은 프레임웍이다. 기능이 많고 유연한데 그만큼 제약이 많고 잘 알고 써야 한다.

가장 어려운것은 Mapping이다.


소스코드는 여기

https://github.com/Kyeongrok/baseball_mapping


목차는 다음과 같다.1.Project빌드

2.필요한 라이브러리 선택

- JPA, MySql, JDBC, H2

3.application-test.yml 만들기

5.Team 엔티티(Entity) 만들기

6.Lombok 설정

7.TeamRepository 만들기

8.TeamRepository test code 만들기




인텔리J를 실행 한다.

Create Project를 누른다.


좌측 Spring Initializer를 선택한다.

Next누른다.


프로젝트 이름 등을 정한다.

Type을 Gradle Project로 바꿔준다. 시나리오가 야구 경기중 특정 팀의 이닝별 점수를 ManyToOne 양방향 매핑을 할 것이기 때문에 artifact, name을 baseball로 했다.


필요한 라이브러리를 선택한다.

일단 이번 포스트의 주인공인 JPA를 선택하고 DB는 H2로 할 것이다. MySql은 나중에 연결하고 싶을 수도 있어서 import한다. JDBC는 예의상 import한다.


Core에 Lombok도 추가 해준다. setter, getter를 자동으로 만들어준다. 한번만 쓴사람은 없다.


그래들 설정이다. 

Next누른다.


프로젝트가 생성 되었다. 우측 하단에 progress bar가 계속 돌면서 프로젝트를 빌드한다.


빌드가 완료되면 이렇게 색이 알록달록 들어간다.


테스트 설정 파일 넣기

test/resources 를 만들고 아래 파일을 만든다.

application-test.yml

spring:
jpa:
database: H2
generate-ddl: true
show-sql: true
hibernate:

      ddl-auto: create


Team 엔티티(Entity) 만들기

com.entites에 Team 클래스를 만든다.

일단 되는지만 보기 위해서 최소한의 id와 name field만 넣는다.

@Entity, @Data annotation을 붙혀준다.


롬복(Lombok)설정 하기

ctrl + alt + s 를 눌러서 설정을 연 후에 annotation으로 검색해서 위와 같이 Enable annotation processing에 체크 한다.


TeamRepository만들기


TeamRepository test code 만들기

Test Code를 만든다.


TeamRepositoryTest.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@RunWith(SpringRunner.class)
@DataJpaTest
@ActiveProfiles("test")
public class TeamRepositoryTest {
 
    @Autowired
    private TeamRepository teamRepository;
 
    @Test
    public void saveAndSelect() throws Exception {
        Team team = new Team();
        team.setId(1);
        team.setName("한화");
        teamRepository.save(team);
 
        Team selectedTeam = teamRepository.findOne(1l);
        assertEquals(1l, selectedTeam.getId());
        assertEquals("한화", selectedTeam.getName());
 
 
    }
}
cs



Test 실행하기

이렇게 파란불이 들어오면 잘 만들었고 잘 실행 된 것이다.




댓글을 달아 주세요

  1. 경록님 2017.07.10 02:51 신고

    제트브레인 강연하시분.. 좋아요~