60
---------- 1 SPRING-DATA-JPA 초보 입문자용 개인용 정리 튜토리얼 (아라한사의 메모..;;) https://fb.com/me.adunhansa https://twitter.com/arahansa http ://adunhansa.tistory.com/ 사이트 : http://100coding.com/go ABOUT CONTACT SOURCE 1

spring data jpa 간단한 튜토리얼

  • Upload
    -

  • View
    1.642

  • Download
    5

Embed Size (px)

Citation preview

Page 1: spring data jpa 간단한 튜토리얼

---------- 1

SPRING-DATA-JPA초보 입문자용 개인용 정리 튜토리얼(아라한사의 메모..;;)

https://fb.com/me.adunhansahttps://twitter.com/arahansahttp://adunhansa.tistory.com/

사이트 : http://100coding.com/go

ABOUT

CONTACT

SOURCE

1

Page 2: spring data jpa 간단한 튜토리얼

1. 작성자 소개 2

아라한사

-----------------------

--------------------------------------------평소 정리를 즐겨합니다. 한 때 동영상강좌도

만들다보니.. 비실명과 만화캐릭터를 쓰네요

양해 부탁드립니다 ㅎㅎ

Page 3: spring data jpa 간단한 튜토리얼

목차 3

• 개요 – 4

• 환경설정 – 6

• 스프링부트 설정 - 14

• 스프링부트헬로월드 – 20

• 하나의 클래스 – 26

• 하나의 클래스 CRUD – 34

• 페이징 처리 – 38

• 일대일관계매핑 – 43

• 일대다매핑 – 47

• 다대다매핑 - 55

-----------------------

Page 4: spring data jpa 간단한 튜토리얼

개요 4

• 에.. 주로 독학을 하다가, 한계를 느껴서2015년부터 스터디에 참여을 하게 되었습니다. 김현기님이 운영하시는 TDD,JPA 스터디 , 오창화님이 운영하시는 pooh 스터디 참여중^^;

• 아무래도 다른 개발환경, 다른 경험을 가지신 분들이 오시다보니스터디에서 쓰게 될 JPA 가 낯설은 분도 계신 것 같기도하고..

• JPA 가 저도 마찬가지로 봐도봐도 아직 낯설어서^^; 정리를 한번 PPT로 해볼려고 합니다. (제가 정리를 제대로 한 게 없더군요.)

• 일단은 기본 객체매핑과 관계 매핑부터 시작합니다~간단하고 부족하고 틀린 곳이 있을 지 모릅니다. 주로 제가 혼자 공부하다보니…;;그리고 심화 정도까지도 안 갑니다;; 항상 급하게 만드느라;;; 아..아무튼~ 자.잘 부탁드립니다! ㄷㄷ

Page 5: spring data jpa 간단한 튜토리얼

개요2 5

• 아참 김영한님께서 JPA 서적 집필중이시라고 합니다. 그리고 책 중간중간에서 JPA 를 다루는 서적들이 많이있습니다. (예를 들자면 최범균님의 스프링 같은책들 말이죠^^)

• 그밖에도 국내에 나온 서적도 몇권 있습니다. ; 기타 링크는 여기에..; http://opentutorials.org/course/1519

• 본 PPT 는 기초적인 내용을 다룹니다.

Page 6: spring data jpa 간단한 튜토리얼

환경설정 6

• 음.. 아무래도 손에 익은 툴이 가장 낫겠지요~

• 이클립스를 키고 메이븐을 켜보도록 하겠습니다.

• 컨트롤 N를 눌러주시고 메이븐 프로젝트로가봅시다

Page 7: spring data jpa 간단한 튜토리얼

프로젝트 생성 7

• 왠만한 것은 Next를 해주다가, 아래의 창에서 maven-archetype-webapp 그리고 두번째창에서 아티팩트ID는마음대로 적어주세요^^

Page 8: spring data jpa 간단한 튜토리얼

이렇게 에러가 납니다? -> 8

• 대략 이런 화면이 나오는데(하단 우측, 제목 글씨 옆에 이미지 참고해주세요) , 메이븐에서 갓 구워낸 녀석이 에러를 내는 것이죠~ 일단 에러부터 잡아보도록하겠습니다. 프로젝트를 우클릭하시면 properties 가 나옵니다. (단축키로alt+enter를 누르시고)먼저 project factes 에서 java 버전을 컴퓨터 버전에 맞게(저는 1.8) dynamic web module 은 3.0 이상으로 맞춰줍니다~

Page 9: spring data jpa 간단한 튜토리얼

이렇게 에러가 납니다? 9

• 하지만 다음과 같이 에러가 나는 경우가 있습니다-_-…esc를 눌러주시고 프로젝트를 alt+shift+w 를 눌러주시면 다음과 같은화면이 뜨는데 네비게이터로 들어가셔서org.eclipse.common.project.facet.core.xml을 고쳐주도록 합시다.

• 파일 여시면 java 속성과 jst.web 속성이 있습니다. 이부분이 자바버젼과 web모듈 버전이므로 바꿔주시면 됩니다

Page 10: spring data jpa 간단한 튜토리얼

그래도 에러가 납니다? 10

• 예. 에러가 납니다;; 이번엔 JRE 버전을 바꿔주고tomcat을 불러와주도록 해야겠습니다. Jre를먼저 Edit 를 해주시고 1.8 버전으로 바꿔줍시다.

Page 11: spring data jpa 간단한 튜토리얼

그래도 에러가 납니다? 11

• Jre가 변경이 되었으면 이번엔 server runtime을추가시켜줍시다. Add library 를 누르시고 server runtime을추가해주시면 tomcat을 불러와주시면 됩니다. 여기서 자세한내용은 생략 ^^

Page 12: spring data jpa 간단한 튜토리얼

일단 프로젝트 기본설정^^; 12

• 일단 깨끗한 프로젝트가 생성이 되었군요. 이걸로 학습을 진행해보도록 하겠습니다^^;

• 원래는 스프링에서 jpa를 쓰려면 설정이 또 복잡한게 많은데.. 본슬라이드의 목적은 jpa에 익숙해지는 것이므로 spring boot를이용해서 복잡한 설정은 빼보겠습니다.

Page 13: spring data jpa 간단한 튜토리얼

아참.. 13

• 아.. 요즘에 gradle, 인텔리J, thymeleaf 에익숙해지려고 하는데..

• 이상하게 인텔리J에서 spring boot를 적용시켜서jsp뷰파일을 열 때 404 에러가 납니다.

• 똑같은 프로젝트를 이클립스에서 열면 이클립스에서는잘 되구요.. 프로젝트의 문제가 아니라 제 인텔리J 문제인것같습니다.

아시는 분은 답변좀 굽신굽신;;

Page 14: spring data jpa 간단한 튜토리얼

자 이제 Boot 를 적용시켜볼까요? 14

• 자, 모든 소스의 근원은 공홈입니다. 공홈http://projects.spring.io/spring-boot/ 에서 소스를 한번받아보겠습니다. 다음의 소스를 pom.xml 에 적어줍시다. (프로젝트 제일 하단 위치)

• 오른쪽 화면같이 잠시 의존성 파일들을 받아주는 시간 걸립니다. 물마시고오겠습니다.

Page 15: spring data jpa 간단한 튜토리얼

메이븐이 아파요 15

의존성 파일들을 다 받으면

다음과 같이 에러가 나는 경우

가 있는데, 메이븐설정 pom.xml 가

up-to-date 가 아니니 업데이트

해달라는 말이군요.

프로젝트를 눌러주시고 alt+f5

눌러주시면 말끔해집니다^^

Page 16: spring data jpa 간단한 튜토리얼

메이븐이 아파요 16

• 가 아니라..다음과 같이 에러가 뜨는 군요;;;

• Facet 설정등을 메이븐에서 적어주지 않았기때문에 나오는 것같습니다. 메이븐을 업데이트하니에러가 나는 거군요. Pom.xml 을 다시설정해줍시다.

Page 17: spring data jpa 간단한 튜토리얼

메이븐이 아파요 17

• 우선 메이븐 설정에 다음과 같이 메이븐 컴파일러플러그인을 적용해줍시다. 소스와 타겟속성에 자바버젼을맞춰줍니다. (아.. 중간에 properties 괜히 넣었군요;; 삽질죄송 ㅋ 이 부분은소스는 이따가 링크 나옵니다~;)

Page 18: spring data jpa 간단한 튜토리얼

메이븐들이 아파요 18

• 그리고 main/webapp/WEB-INF/web.xml 파일을 보시면다음과 같이 되어있습니다.

• 예 이것을 기준으로 매번 facet 속성이 초기화되는 것같습니다. 이것도 다음 그림으로 바꿔줍시다.

Page 19: spring data jpa 간단한 튜토리얼

방긋방긋 프로젝트 19

• 그럼 다음과 같이 이제 프로젝트를 누르고 아무리 alt+f5 메이븐업데이트를 눌러도 에러가 나지 않습니다.. 고쳐준 것은 pom.xml 과web.xml 입니다. 소스는 다음과 같습니다.

• Pom.xml https://github.com/arahansa/learnspringdatajpa/blob/4b1e6238cc6fe69e2be1f3c7ef3dc7517db40a08/pom.xml

• Web.xml• https://github.com/arahansa/learnspringdatajpa/blob/4b1e6238cc6fe69e2b

e1f3c7ef3dc7517db40a08/src/main/webapp/WEB-INF/web.xml

Page 20: spring data jpa 간단한 튜토리얼

다시 스프링 부트 확인. 20

• 자, 이제 프로젝트가 방긋방긋 어느정도 안심이 되니 스프링부트로 헬로월드부터띄워놓고 작업해보도록 합니다. 다음과 같이 소스를 적어줍시다. 여기(http://projects.spring.io/spring-boot/) 서 복붙하시면 됩니다.

Page 21: spring data jpa 간단한 튜토리얼

헬로월드 21

• 다음과 같이 Run- run as- spring boot app 을눌러줘보도록 하겠습니다. 다음과 같은 헬로월드가보입니다.

Page 22: spring data jpa 간단한 튜토리얼

스프링부트의 설정은. 22

• 음 헬로월드가 뜹니다. 참 신기한 세상입니다.

• 어노테이션이 2 개 달리긴 했는데.. 부트에 관한 자세한설명은 생략하도록 하겠습니다. (어차피 이따가 또바꿉니다^^)

Page 23: spring data jpa 간단한 튜토리얼

자, 그 다음으로 해볼일은 Jsp 파일 열어보기! 23

• 여기선 스프링부트의 설정을 약간 다뤄봅니다.– 우선 보시는 것처럼, java 폴더에서 controller, domain,

repository 패키지를 만들어줍시다.

– 그리고 다음처럼기존의 sampleController 위에 ComponentScan 을 붙여줘보도록하겠습니다. Controller 패키지의 컴포넌트들을 읽어보겠단 뜻입니다.

– (나중에 다시 또 바뀝니다.. 제가 중간에 삽질했네요 ㅋㅋ : 미래에서 적은 글)

Page 24: spring data jpa 간단한 튜토리얼

컨트롤러 패키지 설정과 application.properties 설정 24

• 다음과 같이 controller 설정을 해주도록 하겠습니다. Controller 패키지 안에넣어줍시다.

• 이렇게 되면 jsp 파일을 연결해줘야 하는데, 다음과 같이 설정해줍니다. Resources 폴더에 application.properties 란 파일을 만들어줍니다. 이 파일은부트의 설정들을 적어주는 파일입니다. 보시는 것처럼 spring.view.prefix와suffix 설정을 잡아주면 webapp폴더를 기준으로 /WEB-INF/jsp/로 들어갑니다.

Jsp파일 위치의 최종 주소는 /WEB-INF/jsp/ 와 컨트롤러에서 적어준 test/test 그리고 suffix 가 들어간 .jsp 가 들어가서webapp/WEB-INF/jsp/test/test.jsp 가 되게 됩니다 .

Page 25: spring data jpa 간단한 튜토리얼

Jsp 설정 완료! 25

• 다음과 같은 구조로 설정해주고 boot를 다시 켜보도록하겠습니다. 처음에 켰던 대로 다시 켜주시고 test 로 접속하시면hello test 잘 뜹니다^^ (jsp 파일은 대충 만..만드세요 무책임;)

Page 26: spring data jpa 간단한 튜토리얼

자, 이제 spring-data-jpa 를 들어가볼까요? 26

• 자 먼저 pom.xml 을 다음과 같이 추가해주겠습니다.

• 공홈소스에서 퍼오겠습니다. 밑의 설정들은 data-jpa와 h2 내장 database를 쓰겠다는 얘기입니다.

• https://spring.io/guides/gs/accessing-data-jpa/

Page 27: spring data jpa 간단한 튜토리얼

앗 그리고 잠시 리팩토링?^^; 27

• Hello package의 SampleController 가 있습니다. 클래스 상단의 어노테이션을 다음과 같이바꿔줍시다. ㅠㅠ (삽질 죄송 ㅎ; )

• 패키지를 다음과 같이 바꿔줍시다. ㅠㅠ

• SampleController 가 com.example 에 있고 나머지 controller 와 domain, repository를com.example 밑에 넣어줍시다.ㅠㅠ (삽질죄송 ㅋ)

Page 28: spring data jpa 간단한 튜토리얼

DB서버 접속 환경 설정 28

• 메모리 DB를 써보도록 하겠습니다~~ 다음과 같이spring.datasource로 시작하는 속성들을 설정해주도록 하겠습니다.

• Datasource.url 을 메모리DB로 사용하되, 스프링부트가 띄워진상태에서 나중에 DB확인을 할수있도록 tcp localhost로 합니다. (공홈참고함)소스는 다음과 같습니다.

• https://github.com/arahansa/learnspringdatajpa/blob/f957a2036b2998239ea59d746480e058d3c5f3ee/src/main/resources/application.properties

Page 29: spring data jpa 간단한 튜토리얼

Domain 클래스 작성 29

• 다음과 같이 도메인클래스를 만들어 주도록 하겠습니다. 소스는 여기에있습니다~. 아 이늄은 오른쪽 사진 참고해주세요^^ㅋ 그냥 일단 간단히;;

• https://github.com/arahansa/learnspringdatajpa/blob/58f0305d5a08c94b07a16f74ecf84d34a2515c33/src/main/java/com/example/domain/JustOne.java

Page 30: spring data jpa 간단한 튜토리얼

리파지토리 작성 30

• 리파지토리를 작성해보도록 하겠습니다. Spring-data-Jpa의 매직입니다. 이렇게 해주는 것만으로 간단한 CRUD 가 완성이 되었습니다. 신기합니다^^; Data jpa의 repository 인터페이스를 상속하고 있습니다. 이런 계층이 있다는 것만 우선 보고 갑시다.

Page 31: spring data jpa 간단한 튜토리얼

컨트롤러 작성 31

• 그럼 이제 컨트롤러를 간단히 만들어주도록 하겠습니다. • https://github.com/arahansa/learnspringdatajpa/blob/58f0305d5a08c94b07a16f7

4ecf84d34a2515c33/src/main/java/com/example/controller/JustOneController.java

• /one 으로 접속했을 때 그냥 db저장만 해두고, “test/test”로 리턴하러 가보겠습니다.

Page 32: spring data jpa 간단한 튜토리얼

32

• 자 이제, 다시한번 Boot 를 가동시켜보도록 하겠습니다. Localhost:8080/one 으로 접속하면 db 저장 작업이 동작하겠습니다. 하지만 확인을 어떻게 할가요? 여기선 우선 직접 확인해보겠습니다. 이클립스내에는 data source explorer 라는툴이 있지만, 직접 공홈 홈피에서 h2 를 다운받아 실행해보겠습니다.

다운받아 설치하면 다음과 같은 h2 console 을 실행할 수 있습니다.

Page 33: spring data jpa 간단한 튜토리얼

내장DB 내용 확인하기 33

• 이제 콘솔로 접속을 하는데, 아까 application.properties 의 주소에맞춰서 다음과 같이 jdbc url 을 접속해주도록 하겠습니다.

• 음 그럼 저것과 같이 just_one 이 보이는 군요~ 클릭을 해주면 select 문이 완성되고 한번 내용을 봅시다. 음 뭐~~ 예상한 대로 나온것같습니다. +를 계속 누르셔서 칼럼들이 어떻게 만들어졌는지확인해봅시다~

Page 34: spring data jpa 간단한 튜토리얼

테스트 케이스 만들어보기~ 34

• 자 이제 하나의 속성이 어떻게 되가는지 봤으니, 테스트 코드를 작성해서 어떻게 crud 가동작하는지 알아보도록 하겠습니다

JustoneRepository를 여시고,Ctrl+N 하셔서Test로 검색Test case 를만들어보겠습니다

Page 35: spring data jpa 간단한 튜토리얼

테스트 케이스 만들어보기~ 35

• 아.. 그리고 이런 창(우측상단)이 뜨는 군요~음.. 당장 이걸 누르고싶은 생각도 있지만 스프링테스트로 한번 작성해보겠습니다~~ 그러기 위해선 pom.xml 을 수정해야겠군요~~ 우측하단의의존성설정을 pom.xml에 넣어줍시다.

Page 36: spring data jpa 간단한 튜토리얼

테스트 케이스 작성~ 36

• 예. 그러면 다음과 같은 테스트 케이스가 생기며, Junit test case 로실행시켜주시면 다음과 같이 우선은 실패가 뜰 것입니다. 이제 CRUD 를만들어볼까요. 우선은 fail 이라는 메소드로 인해 당연히 실패합니다.

Page 37: spring data jpa 간단한 튜토리얼

CRUD 작성 37

• 다음과 같이 바꿔주고 읽기쓰기삭제수정에 관한 테스트를 작성해줘봅시다~~자세한 내용은 주석에.. 소스는 여기에.https://github.com/arahansa/learnspringdatajpa/blob/d4de0b2e2c46f835727e95628cf545d516f097d4/src/test/java/com/example/repository/JustOneRepositoryTest.java

Page 38: spring data jpa 간단한 튜토리얼

페이징 처리 1 38

• 자 CRUD 를 해봤으니 이번엔 페이징을 해보도록 하겠습니다. Pagerequest를 날리는 것이 여기서 핵심인 것같군요. 40개정도저장해보고 그중에 10개를 뽑아와서 생각한 것을 뽑아왔는지 검사를해보도록 하겠습니다~

Page 39: spring data jpa 간단한 튜토리얼

페이징 처리 2 – 정렬 39

• 페이징처리 역순 정렬해봅니다~

Page 40: spring data jpa 간단한 튜토리얼

특정 메시지로 가져와보기 40

• 이번엔 간단한 검색을 해보도록 하겠습니다. 특정 메시지를 가지고서 찾아보도록 하겠습니다~ JustOneRepository 에 좀 더 적어주면 됩니다

• 객체를 적어주시고 findBy를 하시고 자동완성 기능을 이용하시면 다음과 같이 필드를 자동으로읽어서 무엇을 선택할지 보여줍니다. 테스트 소스는 여기에 ^^ https://github.com/arahansa/learnspringdatajpa/blob/0c0d1504cd40935d6004ee26e261b6d447baa326/src/test/java/com/example/repository/JustOneRepositoryTest.java

Page 41: spring data jpa 간단한 튜토리얼

특정 조건 추가해보기. 41

• http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation

• 이곳을 참고해봅시다. 여기서는 특정날짜 이전, 특정 메시지를 뽑아보도록 하겠습니다. 저렇게 여러가지 조건을 넣어서 리스트로 뽑아줄 수가 있습니다.

• 다음 페이지에 한 페이지로 데이터를 집어넣고 뽑아서 테스트를 해보겠습니다.(소스가 좀 안 이쁘군요;; 날짜는 보통 joda time 아니면 java8 을 써야한다고합니다.)

• 소스는 이곳을 참고해보세요~ https://github.com/arahansa/learnspringdatajpa/commit/e4468f0df0cdc0b97e6656d5bfa22a861c133c99

Page 42: spring data jpa 간단한 튜토리얼

특정 조건 추가해보기. 42

Page 43: spring data jpa 간단한 튜토리얼

43

• 1:1 관계매핑부터 시작해보겠습니다.일단 소스는 여기(하단 링크)를 참고해주세요~

• https://github.com/arahansa/learnspringdatajpa/commit/43305055e03335f8f1c9c89227c724546e939ae3

Page 44: spring data jpa 간단한 튜토리얼

1:1 매핑 44

• 1:1 매핑을 한번 만들어보겠습니다. 가장 간단하게 다음과 같은 구조로 가보겠습니다. 회원이 있고, 회원세부정보를 가지고 있다고 가정합니다. 두 개의 테이블은 1:1 매핑이 되어있습니다. 최종 목적은 이런 화면을 보고 싶은 것입니다. 패키지 구조는다음과 같이 가져갑시다. (이제부터는 패키지를 테마별로 해서 그 안에 다집어넣습니다;; 으 애초에 이럴걸 그랬군요;;)

Page 45: spring data jpa 간단한 튜토리얼

1:1 매핑 클래스 작성 45

• 다음은 1:1 매핑 예제입니다. 양쪽에서 서로의 객체를 필드지정해주면서 @onetoone 어노테이션을붙여줍시다. @JoinColumn 에서 name 으로 해주면 매핑하는 테이블 외래키의 컬럼명을 지정할수 있습니다.Onetoone 매핑으로 상대 테이블의 주키를 외래키로 가져오는 것을 볼수 있습니다.mappedBy에서상대쪽 필드로 매핑(?) 되어안기는(?) 것을 볼 수 있습니다.

Page 46: spring data jpa 간단한 튜토리얼

Cascade란 무엇인고? 46

• 여기서 또 처음 보는 옵션이 나오는데 Cascade 란 것입니다. 이것은 무엇일까요? 저는 왠지 도미노가 떠오릅니다. 소스를 보면서 얘기할까요~ (컨트롤러 주목~)이런 경우 컨트롤러에서 /member 에 접속하면 Db에 저장을 합니다.

• 저장을 하는 것은 member 만 저장을 하는데, member_detail 테이블도 값이 저장되어있는 것을보실 수가 있습니다. 이렇게 하게 만들어주는 것이 바로 cascade(우리말로는 작은폭포?) 입니다.

• 매핑이 서로 되어있기 때문에 member에 set설정으로 객체를 지정해주는 것만으로도 연관된객체들이 DB에 같이 저장이 됩니다. 기본값은 아무 cascade 작업을 안하는 것이고, Member의cascade설정에는 all 로 되어있으며 cascade 타입엔 여러 속성이 있습니다만 이것은 책이나API를 참고해주세요 (무책임) Fetchtype은 다음 장 일대다매핑에서 설명해보겠습니다~

Page 47: spring data jpa 간단한 튜토리얼

일대다 매핑 47

• 일대다인 경우가 어떤 경우가 있을까요. 간단히 생각해보자면, 대학 하나와 학생여러명이 있는 경우를 생각해보기로 하겠습니다. ㅎㅎ일인쪽에서는 @OnetoMany 를 여러명인쪽(학생)에서는 @ManyToOne 을적어주도록 하겠습니다.

• targetEntity 는 Many쪽 해당 클래스를 명시하는 것으로 보여집니다^^;FetchType은 일단 lazy 모드로 하겠습니다.

• 일대다매핑 총 소스는 여기를 참고해주세요~ (https://github.com/arahansa/learnspringdatajpa/commit/b5266aa4b02c5d39a96768b318918eaaff3cbb9e )

Page 48: spring data jpa 간단한 튜토리얼

일대다매핑 한번 보기 48

• 다음의 리파지토리를 같은 패키지안에 만들고 이제 그럼 컨트롤러 작업을해보겠습니다. 음.. 사실은 테스트 케이스를 만들어 학습하는게 좋은 것같지만 여기선컨트롤러를 만들고 직접 한번 어떻게 Fetching 이 이뤄지는지도 한번 보겠습니다.Student 를 간단하게 만들기 위한 생성자도 만들어줘야겠군요.

Page 49: spring data jpa 간단한 튜토리얼

컨트롤러의 선언!~ 49

• 음.. 뭐 흐름은 크게 바뀐 것이 없습니다. 학생리스트를 만들어서 University 객체에set 해주고 저장합니다.

Page 50: spring data jpa 간단한 튜토리얼

컨트롤러의 선언!~ 50

• application.properties 파일에 다음과 같은 줄을 추가해줍시다. 가동되는 Sql문을 볼 수 있게해줍니다.

• 아 컨트롤러에 이것도 마저 넣어줍시다. 방금 전 경로로 DB세팅을해놓고서 여기서 불러와보는 것입니다.

Page 51: spring data jpa 간단한 튜토리얼

일대다매핑 밑작업 51

• 아. University 객체에 이것도 추가해줍시다. 학생들이랑 같이 출력하게 해주는 것입니다. 모든준비 완료되었습니다~

Page 52: spring data jpa 간단한 튜토리얼

52

• 자 이제 다시 부트를 가동시키고, 다음주소로 들어가면 이런 화면이 나옵니다. 링크를눌러서 university check 를 해봅시다. 이클립스 콘솔에서는 다음과 같은 화면이나옵니다. 저장이 cascade 되어서 student 에 된 것을 볼 수가 있습니다.

• 다음의 경로를 입력하면 그 밑에 이런 sql문이 뜨면서 university 만 가져옵니다.Student 테이블에는 접근하지 않는 것을 볼 수가 있습니다.

Page 53: spring data jpa 간단한 튜토리얼

53

• 하지만 이 링크에 접속하면? 짜잔! 다음과 같이 Lazy loading 에서 Students 리스트를 불러오는 것을 볼 수가있습니다. 이것이 바로 FetchType.Lazy 모드 덕분입니다.

Page 54: spring data jpa 간단한 튜토리얼

FetchType 이란 무엇일까요? 54

• 자, 스택오버 플로우의 얘기에서 잠깐 설명하자면

• 대학목록을 불러올 때, 학생들(몇천 몇만 몇십만?) 다 불러올려면 부하가 엄청날 것입니다. 이럴때좀 느긋하게 레이지 로딩하면 좋다 이겁니다?!(무책임간단한 설명;;) 자세한 것은 책과 공홈 참조하시면 됩니다;;;; Eager 모드와 Lazy 모드가 있습니다.

• (http://stackoverflow.com/questions/2990799/difference-between-fetchtype-lazy-and-eager-in-java-persistence)

Page 55: spring data jpa 간단한 튜토리얼

다대다매핑 55

• 다대다 매핑을 생각해봅시다. 책과 카테고리가 있다고 합시다. 정치,외교/정치일반/정치비평에세이 모두 MB의 비용을 가지고 있다고 하고, 정치비평카테고리에서는 여러가지책이 있습니다.

• 하나의 책이 여러 카테고리를 가질 수 있고, 하나의 카테고리에서도 여러 책을 가질수 있습니다. 다대다매핑입니다. (이 예시가 잘 맞을진 모르겠습니다. 지금새벽3시여서 빨리 마치고 일단 잠이나 자려고요;; 소개되는 API 만봅시다;;(무책임))..

Page 56: spring data jpa 간단한 튜토리얼

56

• Book 에서 주키를 뽑아오고, Category에서 주키를 뽑아 이런테이블이 만들어집니다. 소스는 다음과 같습니다.https://github.com/arahansa/learnspringdatajpa/commit/a1358080790aec3fbc25864b920492ca7ddc7ea8

Page 57: spring data jpa 간단한 튜토리얼

다대다매핑 57

• Book 클래스와 Category 클래스를 다음과 같이 설정해줘봅시다. 게터세터와 생성자는 생략;; 소스에 나옵니다; ㅎ

• 두 개의 테이블이 참여하여 다른 하나의 테이블을 만들 것입니다. 생성되는 테이블명은 BOOK_CATEGORY 가 될 것이고, 내가 참여하는 쪽에서는 joinColumns 로 우선 주키명을, 상대쪽 테이블은 inverseJoinColumns 로 주키명을 적어줍니다.

일단 이 정도로(?) .. 간결하게 해봅시다.

Page 58: spring data jpa 간단한 튜토리얼

다대다매핑 설정 58

• 이제 테스트 클래스를 작성하러가봅시다. 흠.. 여기서부터는 메모리 db 가 아니라 로컬에 저장을하고 한번 보기로 하겠습니다. 다음과 같이 ActiveProfiles 어노테이션을 주고 test모드로해봅시다.

• 그럼 다음 부분의 application-test.profiles 란 부분의 설정들을 테스트할때 적용하게 됩니다. 다음과 같이 한번 적용해줘봅시다. Ddl-auto 어쩌고 하는 옵션은 하이버네이트가 테이블을생성하면서 생성만 할 것인지, 생성하고 지울 것인지 하는 옵션입니다. 자세한 것은…역시 API 혹은책을 참조해주세요^^; server.port는 톰캣이 구동되면..(음 근데 적어줄 필요가 없나?ㅎ;) 가동될포트번호를 설정하는 것입니다..;

Page 59: spring data jpa 간단한 튜토리얼

59

• 다음과 같은 사진을 참고해서 정치비평에세이 부문에 책들을배정해보도록 하겠습니다. 테스트코드를 짜고서 데이터베이스를직접 확인해보고 싶습니다. 짜고서 돌리면~ 우측 사진같이 배정된것을 볼 수가 있습니다.

Page 60: spring data jpa 간단한 튜토리얼

60

THANK YOU !

arahansa------

------

페북 : https://fb.com/me.adunhansa트위터 : https://twitter.com/arahansa블로그: http://adunhansa.tistory.com/사이트 : http://100coding.com