Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

spring data jpa 간단한 튜토리얼

13,900 views

Published on

github : https://github.com/arahansa/learnspringdatajpa
스프링 데이터 Jpa 간단한 튜토리얼 입니다. 초보용^^;
스프링 부트, 메이븐..
내용은 간단한 매핑, CRUD, 페이징, 스프링 부트조금.


Published in: Technology
  • 설정이랑 이런거 다 맞게 하고 했는데 24페이지에 Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. There was an unexpected error (type=Not Found, status=404). No message available 오류가 뜨던데
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

spring data jpa 간단한 튜토리얼

  1. 1. ---------- 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
  2. 2. 1. 작성자 소개 2 아라한사 ------------------------------------------------------------------- 평소 정리를 즐겨합니다. 한 때 동영상강좌도 만들다보니.. 비실명과 만화캐릭터를 쓰네요 양해 부탁드립니다 ㅎㅎ
  3. 3. 목차 3 • 개요 – 4 • 환경설정 – 6 • 스프링부트 설정 - 14 • 스프링부트헬로월드 – 20 • 하나의 클래스 – 26 • 하나의 클래스 CRUD – 34 • 페이징 처리 – 38 • 일대일관계매핑 – 43 • 일대다매핑 – 47 • 다대다매핑 - 55 -----------------------
  4. 4. 개요 4 • 에.. 주로 독학을 하다가, 한계를 느껴서 2015년부터 스터디에 참여을 하게 되었습니다. 김현기님이 운영하시는 TDD,JPA 스터디 , 오창화님이 운영하시는 pooh 스터디 참여중^^; • 아무래도 다른 개발환경, 다른 경험을 가지신 분들이 오시다보니 스터디에서 쓰게 될 JPA 가 낯설은 분도 계신 것 같기도하고.. • JPA 가 저도 마찬가지로 봐도봐도 아직 낯설어서^^; 정리를 한번 PPT로 해볼려고 합니다. (제가 정리를 제대로 한 게 없더군요.) • 일단은 기본 객체매핑과 관계 매핑부터 시작합니다~ 간단하고 부족하고 틀린 곳이 있을 지 모릅니다. 주로 제가 혼자 공부하다보니…;; 그리고 심화 정도까지도 안 갑니다;; 항상 급하게 만드느라;;; 아..아무튼~ 자.잘 부탁드립니다! ㄷㄷ
  5. 5. 개요2 5 • 아참 김영한님께서 JPA 서적 집필중이시라고 합니다. 그리고 책 중간중간에서 JPA 를 다루는 서적들이 많이 있습니다. (예를 들자면 최범균님의 스프링 같은 책들 말이죠^^) • 그밖에도 국내에 나온 서적도 몇권 있습니다. ; 기타 링크는 여기에..; http://opentutorials.org/course/1519 • 본 PPT 는 기초적인 내용을 다룹니다.
  6. 6. 환경설정 6 • 음.. 아무래도 손에 익은 툴이 가장 낫겠지요~ • 이클립스를 키고 메이븐을 켜보도록 하겠습니다. • 컨트롤 N를 눌러주시고 메이븐 프로젝트로 가봅시다
  7. 7. 프로젝트 생성 7 • 왠만한 것은 Next를 해주다가, 아래의 창에서 maven- archetype-webapp 그리고 두번째창에서 아티팩트ID는 마음대로 적어주세요^^
  8. 8. 이렇게 에러가 납니다? -> 8 • 대략 이런 화면이 나오는데(하단 우측, 제목 글씨 옆에 이미지 참고해주세요) , 메이븐에서 갓 구워낸 녀석이 에러를 내는 것이죠~ 일단 에러부터 잡아보도록 하겠습니다. 프로젝트를 우클릭하시면 properties 가 나옵니다. (단축키로 alt+enter를 누르시고) 먼저 project factes 에서 java 버전을 컴퓨터 버전에 맞게(저는 1.8) dynamic web module 은 3.0 이상으로 맞춰줍니다~
  9. 9. 이렇게 에러가 납니다? 9 • 하지만 다음과 같이 에러가 나는 경우가 있습니다 -_-…esc를 눌러주시고 프로젝트를 alt+shift+w 를 눌러주시면 다음과 같은 화면이 뜨는데 네비게이터로 들어가셔서 org.eclipse.common.project.facet.core.xml을 고쳐주도록 합시다. • 파일 여시면 java 속성과 jst.web 속성이 있습니다. 이부분이 자바버젼과 web모듈 버전이므로 바꿔주시면 됩니다
  10. 10. 그래도 에러가 납니다? 10 • 예. 에러가 납니다;; 이번엔 JRE 버전을 바꿔주고 tomcat을 불러와주도록 해야겠습니다. Jre를 먼저 Edit 를 해주시고 1.8 버전으로 바꿔줍시다.
  11. 11. 그래도 에러가 납니다? 11 • Jre가 변경이 되었으면 이번엔 server runtime을 추가시켜줍시다. Add library 를 누르시고 server runtime을 추가해주시면 tomcat을 불러와주시면 됩니다. 여기서 자세한 내용은 생략 ^^
  12. 12. 일단 프로젝트 기본설정^^; 12 • 일단 깨끗한 프로젝트가 생성이 되었군요. 이걸로 학습을 진행해보도록 하겠습니다^^; • 원래는 스프링에서 jpa를 쓰려면 설정이 또 복잡한게 많은데.. 본 슬라이드의 목적은 jpa에 익숙해지는 것이므로 spring boot를 이용해서 복잡한 설정은 빼보겠습니다.
  13. 13. 아참.. 13 • 아.. 요즘에 gradle, 인텔리J, thymeleaf 에 익숙해지려고 하는데.. • 이상하게 인텔리J에서 spring boot를 적용시켜서 jsp뷰파일을 열 때 404 에러가 납니다. • 똑같은 프로젝트를 이클립스에서 열면 이클립스에서는 잘 되구요.. 프로젝트의 문제가 아니라 제 인텔리J 문제인것같습니다. 아시는 분은 답변좀 굽신굽신;;
  14. 14. 자 이제 Boot 를 적용시켜볼까요? 14 • 자, 모든 소스의 근원은 공홈입니다. 공홈 http://projects.spring.io/spring-boot/ 에서 소스를 한번 받아보겠습니다. 다음의 소스를 pom.xml 에 적어줍시다. (프로젝트 제일 하단 위치) • 오른쪽 화면같이 잠시 의존성 파일들을 받아주는 시간 걸립니다. 물마시고 오겠습니다.
  15. 15. 메이븐이 아파요 15 의존성 파일들을 다 받으면 다음과 같이 에러가 나는 경우 가 있는데, 메이븐설정 pom.xml 가 up-to-date 가 아니니 업데이트 해달라는 말이군요. 프로젝트를 눌러주시고 alt+f5 눌러주시면 말끔해집니다^^
  16. 16. 메이븐이 아파요 16 • 가 아니라..다음과 같이 에러가 뜨는 군요;;; • Facet 설정등을 메이븐에서 적어주지 않았기 때문에 나오는 것같습니다. 메이븐을 업데이트하니 에러가 나는 거군요. Pom.xml 을 다시 설정해줍시다.
  17. 17. 메이븐이 아파요 17 • 우선 메이븐 설정에 다음과 같이 메이븐 컴파일러 플러그인을 적용해줍시다. 소스와 타겟속성에 자바버젼을 맞춰줍니다. (아.. 중간에 properties 괜히 넣었군요;; 삽질죄송 ㅋ 이 부분은소스는 이따가 링크 나옵니다~;)
  18. 18. 메이븐들이 아파요 18 • 그리고 main/webapp/WEB-INF/web.xml 파일을 보시면 다음과 같이 되어있습니다. • 예 이것을 기준으로 매번 facet 속성이 초기화되는 것같습니다. 이것도 다음 그림으로 바꿔줍시다.
  19. 19. 방긋방긋 프로젝트 19 • 그럼 다음과 같이 이제 프로젝트를 누르고 아무리 alt+f5 메이븐 업데이트를 눌러도 에러가 나지 않습니다.. 고쳐준 것은 pom.xml 과 web.xml 입니다. 소스는 다음과 같습니다. • Pom.xml https://github.com/arahansa/learnspringdatajpa/blob/4b1e6238cc6fe6 9e2be1f3c7ef3dc7517db40a08/pom.xml • Web.xml • https://github.com/arahansa/learnspringdatajpa/blob/4b1e6238cc6fe69e2b e1f3c7ef3dc7517db40a08/src/main/webapp/WEB-INF/web.xml
  20. 20. 다시 스프링 부트 확인. 20 • 자, 이제 프로젝트가 방긋방긋 어느정도 안심이 되니 스프링부트로 헬로월드부터 띄워놓고 작업해보도록 합니다. 다음과 같이 소스를 적어줍시다. 여기(http://projects.spring.io/spring-boot/) 서 복붙하시면 됩니다.
  21. 21. 헬로월드 21 • 다음과 같이 Run- run as- spring boot app 을 눌러줘보도록 하겠습니다. 다음과 같은 헬로월드가 보입니다.
  22. 22. 스프링부트의 설정은. 22 • 음 헬로월드가 뜹니다. 참 신기한 세상입니다. • 어노테이션이 2 개 달리긴 했는데.. 부트에 관한 자세한 설명은 생략하도록 하겠습니다. (어차피 이따가 또 바꿉니다^^)
  23. 23. 자, 그 다음으로 해볼일은 Jsp 파일 열어보기! 23 • 여기선 스프링부트의 설정을 약간 다뤄봅니다. – 우선 보시는 것처럼, java 폴더에서 controller, domain, repository 패키지를 만들어줍시다. – 그리고 다음처럼 기존의 sampleController 위에 ComponentScan 을 붙여줘보도록 하겠습니다. Controller 패키지의 컴포넌트들을 읽어보겠단 뜻입니다. – (나중에 다시 또 바뀝니다.. 제가 중간에 삽질했네요 ㅋㅋ : 미래에서 적은 글)
  24. 24. 컨트롤러 패키지 설정과 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 가 되게 됩니다 .
  25. 25. Jsp 설정 완료! 25 • 다음과 같은 구조로 설정해주고 boot를 다시 켜보도록 하겠습니다. 처음에 켰던 대로 다시 켜주시고 test 로 접속하시면 hello test 잘 뜹니다^^ (jsp 파일은 대충 만..만드세요 무책임;)
  26. 26. 자, 이제 spring-data-jpa 를 들어가볼까요? 26 • 자 먼저 pom.xml 을 다음과 같이 추가해주겠습니다. • 공홈소스에서 퍼오겠습니다. 밑의 설정들은 data-jpa 와 h2 내장 database를 쓰겠다는 얘기입니다. • https://spring.io/guides/gs/accessing-data-jpa/
  27. 27. 앗 그리고 잠시 리팩토링?^^; 27 • Hello package의 SampleController 가 있습니다. 클래스 상단의 어노테이션을 다음과 같이 바꿔줍시다. ㅠㅠ (삽질 죄송 ㅎ; ) • 패키지를 다음과 같이 바꿔줍시다. ㅠㅠ • SampleController 가 com.example 에 있고 나머지 controller 와 domain, repository를 com.example 밑에 넣어줍시다.ㅠㅠ (삽질죄송 ㅋ)
  28. 28. DB서버 접속 환경 설정 28 • 메모리 DB를 써보도록 하겠습니다~~ 다음과 같이 spring.datasource로 시작하는 속성들을 설정해주도록 하겠습니다. • Datasource.url 을 메모리DB로 사용하되, 스프링부트가 띄워진 상태에서 나중에 DB확인을 할수있도록 tcp localhost로 합니다. (공홈 참고함) 소스는 다음과 같습니다. • https://github.com/arahansa/learnspringdatajpa/blob/f957a2036b2998239ea59d746480e058d3c 5f3ee/src/main/resources/application.properties
  29. 29. Domain 클래스 작성 29 • 다음과 같이 도메인클래스를 만들어 주도록 하겠습니다. 소스는 여기에 있습니다~. 아 이늄은 오른쪽 사진 참고해주세요^^ㅋ 그냥 일단 간단히;; • https://github.com/arahansa/learnspringdatajpa/blob/58f0305d5a08c94b07a16f74ecf84d34a251 5c33/src/main/java/com/example/domain/JustOne.java
  30. 30. 리파지토리 작성 30 • 리파지토리를 작성해보도록 하겠습니다. Spring-data-Jpa의 매직입니다. 이렇게 해주는 것만으로 간단한 CRUD 가 완성이 되었습니다. 신기합니다^^; Data jpa의 repository 인터페이스를 상속하고 있습니다. 이런 계층이 있다는 것만 우선 보고 갑시다.
  31. 31. 컨트롤러 작성 31 • 그럼 이제 컨트롤러를 간단히 만들어주도록 하겠습니다. • https://github.com/arahansa/learnspringdatajpa/blob/58f0305d5a08c94b07a16f7 4ecf84d34a2515c33/src/main/java/com/example/controller/JustOneController.j ava • /one 으로 접속했을 때 그냥 db저장만 해두고, “test/test”로 리턴하러 가보겠습니다.
  32. 32. 32 • 자 이제, 다시한번 Boot 를 가동시켜보도록 하겠습니다. Localhost:8080/one 으로 접속하면 db 저장 작업이 동작하겠습니다. 하지만 확인을 어떻게 할가요? 여기선 우선 직접 확인해보겠습니다. 이클립스내에는 data source explorer 라는 툴이 있지만, 직접 공홈 홈피에서 h2 를 다운받아 실행해보겠습니다. 다운받아 설치하면 다음과 같은 h2 console 을 실행할 수 있습니다.
  33. 33. 내장DB 내용 확인하기 33 • 이제 콘솔로 접속을 하는데, 아까 application.properties 의 주소에 맞춰서 다음과 같이 jdbc url 을 접속해주도록 하겠습니다. • 음 그럼 저것과 같이 just_one 이 보이는 군요~ 클릭을 해주면 select 문이 완성되고 한번 내용을 봅시다. 음 뭐~~ 예상한 대로 나온 것같습니다. +를 계속 누르셔서 칼럼들이 어떻게 만들어졌는지 확인해봅시다~
  34. 34. 테스트 케이스 만들어보기~ 34 • 자 이제 하나의 속성이 어떻게 되가는지 봤으니, 테스트 코드를 작성해서 어떻게 crud 가 동작하는지 알아보도록 하겠습니다 JustoneRepository 를 여시고, Ctrl+N 하셔서 Test로 검색 Test case 를 만들어보겠습니다
  35. 35. 테스트 케이스 만들어보기~ 35 • 아.. 그리고 이런 창(우측상단)이 뜨는 군요~음.. 당장 이걸 누르고 싶은 생각도 있지만 스프링테스트로 한번 작성해보겠습니다~~ 그러기 위해선 pom.xml 을 수정해야겠군요~~ 우측하단의 의존성설정을 pom.xml에 넣어줍시다.
  36. 36. 테스트 케이스 작성~ 36 • 예. 그러면 다음과 같은 테스트 케이스가 생기며, Junit test case 로 실행시켜주시면 다음과 같이 우선은 실패가 뜰 것입니다. 이제 CRUD 를 만들어볼까요. 우선은 fail 이라는 메소드로 인해 당연히 실패합니다.
  37. 37. CRUD 작성 37 • 다음과 같이 바꿔주고 읽기쓰기삭제수정에 관한 테스트를 작성해줘봅시다~~ 자세한 내용은 주석에.. 소스는 여기에. https://github.com/arahansa/learnspringdatajpa/blob/d4de0b2e2c46f835727e95628cf545d516f097d4/src/test/java/com/ example/repository/JustOneRepositoryTest.java
  38. 38. 페이징 처리 1 38 • 자 CRUD 를 해봤으니 이번엔 페이징을 해보도록 하겠습니다. Pagerequest를 날리는 것이 여기서 핵심인 것같군요. 40개정도 저장해보고 그중에 10개를 뽑아와서 생각한 것을 뽑아왔는지 검사를 해보도록 하겠습니다~
  39. 39. 페이징 처리 2 – 정렬 39 • 페이징처리 역순 정렬해봅니다~
  40. 40. 특정 메시지로 가져와보기 40 • 이번엔 간단한 검색을 해보도록 하겠습니다. 특정 메시지를 가지고서 찾아보도록 하겠습니다~ JustOneRepository 에 좀 더 적어주면 됩니다 • 객체를 적어주시고 findBy를 하시고 자동완성 기능을 이용하시면 다음과 같이 필드를 자동으로 읽어서 무엇을 선택할지 보여줍니다. 테스트 소스는 여기에 ^^ https://github.com/arahansa/learnspringdatajpa/blob/0c0d1504cd40935d6004ee26e261b6d447baa326/src/test/java/com /example/repository/JustOneRepositoryTest.java
  41. 41. 특정 조건 추가해보기. 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/e4468f0df0c dc0b97e6656d5bfa22a861c133c99
  42. 42. 특정 조건 추가해보기. 42
  43. 43. 43 • 1:1 관계매핑부터 시작해보겠습니다. 일단 소스는 여기(하단 링크)를 참고해주세요~ • https://github.com/arahansa/learnspringda tajpa/commit/43305055e03335f8f1c9c89 227c724546e939ae3
  44. 44. 1:1 매핑 44 • 1:1 매핑을 한번 만들어보겠습니다. 가장 간단하게 다음과 같은 구조로 가보겠습니다. 회원이 있고, 회원세부정보를 가지고 있다고 가정합니다. 두 개의 테이블은 1:1 매핑이 되어있습니다. 최종 목적은 이런 화면을 보고 싶은 것입니다. 패키지 구조는 다음과 같이 가져갑시다. (이제부터는 패키지를 테마별로 해서 그 안에 다 집어넣습니다;; 으 애초에 이럴걸 그랬군요;;)
  45. 45. 1:1 매핑 클래스 작성 45 • 다음은 1:1 매핑 예제입니다. 양쪽에서 서로의 객체를 필드지정해주면서 @onetoone 어노테이션을 붙여줍시다. @JoinColumn 에서 name 으로 해주면 매핑하는 테이블 외래키의 컬럼명을 지정할 수 있습니다. Onetoone 매핑으로 상대 테이블의 주키를 외래키로 가져오는 것을 볼수 있습니다. mappedBy에서상대쪽 필드로 매핑(?) 되어 안기는(?) 것을 볼 수 있습니다.
  46. 46. Cascade란 무엇인고? 46 • 여기서 또 처음 보는 옵션이 나오는데 Cascade 란 것입니다. 이것은 무엇일까요? 저는 왠지 도미노가 떠오릅니다. 소스를 보면서 얘기할까요~ (컨트롤러 주목~) 이런 경우 컨트롤러에서 /member 에 접속하면 Db에 저장을 합니다. • 저장을 하는 것은 member 만 저장을 하는데, member_detail 테이블도 값이 저장되어있는 것을 보실 수가 있습니다. 이렇게 하게 만들어주는 것이 바로 cascade(우리말로는 작은폭포?) 입니다. • 매핑이 서로 되어있기 때문에 member에 set설정으로 객체를 지정해주는 것만으로도 연관된 객체들이 DB에 같이 저장이 됩니다. 기본값은 아무 cascade 작업을 안하는 것이고, Member의 cascade설정에는 all 로 되어있으며 cascade 타입엔 여러 속성이 있습니다만 이것은 책이나 API를 참고해주세요 (무책임) Fetchtype은 다음 장 일대다매핑에서 설명해보겠습니다~
  47. 47. 일대다 매핑 47 • 일대다인 경우가 어떤 경우가 있을까요. 간단히 생각해보자면, 대학 하나와 학생 여러명이 있는 경우를 생각해보기로 하겠습니다. ㅎㅎ 일인쪽에서는 @OnetoMany 를 여러명인쪽(학생)에서는 @ManyToOne 을 적어주도록 하겠습니다. • targetEntity 는 Many쪽 해당 클래스를 명시하는 것으로 보여집니다^^; FetchType은 일단 lazy 모드로 하겠습니다. • 일대다매핑 총 소스는 여기를 참고해주세요~ (https://github.com/arahansa/learnspringdatajpa/commit/b5266aa4b0 2c5d39a96768b318918eaaff3cbb9e )
  48. 48. 일대다매핑 한번 보기 48 • 다음의 리파지토리를 같은 패키지안에 만들고 이제 그럼 컨트롤러 작업을 해보겠습니다. 음.. 사실은 테스트 케이스를 만들어 학습하는게 좋은 것같지만 여기선 컨트롤러를 만들고 직접 한번 어떻게 Fetching 이 이뤄지는지도 한번 보겠습니다. Student 를 간단하게 만들기 위한 생성자도 만들어줘야겠군요.
  49. 49. 컨트롤러의 선언!~ 49 • 음.. 뭐 흐름은 크게 바뀐 것이 없습니다. 학생리스트를 만들어서 University 객체에 set 해주고 저장합니다.
  50. 50. 컨트롤러의 선언!~ 50 • application.properties 파일에 다음과 같은 줄을 추가해줍시다. 가동되는 Sql문을 볼 수 있게해줍니다. • 아 컨트롤러에 이것도 마저 넣어줍시다. 방금 전 경로로 DB세팅을 해놓고서 여기서 불러와보는 것입니다.
  51. 51. 일대다매핑 밑작업 51 • 아. University 객체에 이것도 추가해줍시다. 학생들이랑 같이 출력하게 해주는 것입니다. 모든 준비 완료되었습니다~
  52. 52. 52 • 자 이제 다시 부트를 가동시키고, 다음주소로 들어가면 이런 화면이 나옵니다. 링크를 눌러서 university check 를 해봅시다. 이클립스 콘솔에서는 다음과 같은 화면이 나옵니다. 저장이 cascade 되어서 student 에 된 것을 볼 수가 있습니다. • 다음의 경로를 입력하면 그 밑에 이런 sql문이 뜨면서 university 만 가져옵니다. Student 테이블에는 접근하지 않는 것을 볼 수가 있습니다.
  53. 53. 53 • 하지만 이 링크에 접속하면? 짜잔! 다음과 같이 Lazy loading 에서 Students 리스트를 불러오는 것을 볼 수가 있습니다. 이것이 바로 FetchType.Lazy 모드 덕분입니다.
  54. 54. FetchType 이란 무엇일까요? 54 • 자, 스택오버 플로우의 얘기에서 잠깐 설명하자면 • 대학목록을 불러올 때, 학생들(몇천 몇만 몇십만?) 다 불러올려면 부하가 엄청날 것입니다. 이럴때 좀 느긋하게 레이지 로딩하면 좋다 이겁니다?!(무책임간단한 설명;;) 자세한 것은 책과 공홈 참조 하시면 됩니다;;;; Eager 모드와 Lazy 모드가 있습니다. • (http://stackoverflow.com/questions/2990799/difference-between-fetchtype-lazy-and-eager-in-java- persistence)
  55. 55. 다대다매핑 55 • 다대다 매핑을 생각해봅시다. 책과 카테고리가 있다고 합시다. 정치,외교/정치일반/정치비평에세이 모두 MB의 비용을 가지고 있다고 하고, 정치비평 카테고리에서는 여러가지책이 있습니다. • 하나의 책이 여러 카테고리를 가질 수 있고, 하나의 카테고리에서도 여러 책을 가질 수 있습니다. 다대다매핑입니다. (이 예시가 잘 맞을진 모르겠습니다. 지금 새벽3시여서 빨리 마치고 일단 잠이나 자려고요;; 소개되는 API 만 봅시다;;(무책임))..
  56. 56. 56 • Book 에서 주키를 뽑아오고, Category에서 주키를 뽑아 이런 테이블이 만들어집니다. 소스는 다음과 같습니다. https://github.com/arahansa/learnspringdatajpa/comm it/a1358080790aec3fbc25864b920492ca7ddc7ea8
  57. 57. 다대다매핑 57 • Book 클래스와 Category 클래스를 다음과 같이 설정해줘봅시다. 게터세터와 생성자는 생략;; 소스에 나옵니다; ㅎ • 두 개의 테이블이 참여하여 다른 하나의 테이블을 만들 것입니다. 생성되는 테이블명은 BOOK_CATEGORY 가 될 것이고, 내가 참여하는 쪽에서는 joinColumns 로 우선 주키명을, 상대쪽 테이블은 inverseJoinColumns 로 주키명을 적어줍니다. 일단 이 정도로(?) .. 간결하게 해봅시다.
  58. 58. 다대다매핑 설정 58 • 이제 테스트 클래스를 작성하러가봅시다. 흠.. 여기서부터는 메모리 db 가 아니라 로컬에 저장을 하고 한번 보기로 하겠습니다. 다음과 같이 ActiveProfiles 어노테이션을 주고 test모드로 해봅시다. • 그럼 다음 부분의 application-test.profiles 란 부분의 설정들을 테스트할때 적용하게 됩니다. 다음과 같이 한번 적용해줘봅시다. Ddl-auto 어쩌고 하는 옵션은 하이버네이트가 테이블을 생성하면서 생성만 할 것인지, 생성하고 지울 것인지 하는 옵션입니다. 자세한 것은…역시 API 혹은 책을 참조해주세요^^; server.port는 톰캣이 구동되면..(음 근데 적어줄 필요가 없나?ㅎ;) 가동될 포트번호를 설정하는 것입니다..;
  59. 59. 59 • 다음과 같은 사진을 참고해서 정치비평에세이 부문에 책들을 배정해보도록 하겠습니다. 테스트코드를 짜고서 데이터베이스를 직접 확인해보고 싶습니다. 짜고서 돌리면~ 우측 사진같이 배정된 것을 볼 수가 있습니다.
  60. 60. 60 THANK YOU ! arahansa ------ ------ 페북 : https://fb.com/me.adunhansa 트위터 : https://twitter.com/arahansa 블로그: http://adunhansa.tistory.com/ 사이트 : http://100coding.com

×