어? 이게 되네
2022.06.24. 금요일 이공계 전문기술 연수사업 (Spring DATA JPA로 조인하기, 카카오맵 api) 본문
º커넥션 풀
일정한 양의 데이터베이스 풀을 만들어놓고 사용자들에게 요청이 오면 제공하는 것
ºdao 인터페이스에서 메인 클래스 명시해줄 때 <vo클래스이름,pk자료형> 이렇게 써줘야 함 !
º컨트롤러의 서비스이름과 타임리프 적용할 html이름이 똑같아야함!
쿼리스트링과 uri방식의 차이 알고 가기
ㄴ타임리프에서 html에서 컨트롤러로 get방식으로 가져오는 법 !
get방식과 post방식 제대로 구분하기
${}과 {}의 차이 : ${}는 표현언어
input 태그에 값을 나타낼 때는 th:value이고 그 외는 th:text
---------------------------------------------------------------------------------------------------------------------------------------------------------------- Book,Customer,Orders 조인을 jpa에서 처리하는 법
ㄴjpa에서 조인할 때는
누가 부모이고 차수 (둘 사이의 관계에 있는 컬럼을 기준으로 1:n 이나 m:n)등등을 vo를 만들 때 알려줘야 함 !
//근데 나는 여기서 insertable이랑 updatable을 true로 줄 때 오류가 나서 false로 했더니 오류가 안났음..
왜 그런지는 모르겠음... 테이블 설정할 때 뭐 다르게 한건가... 그건 또 아닌데
ㄴ테이블안에서 따로 쿼리를 만들 때는
dao 에서 @Query어노테이션으로 쿼리를 따로 만들어서 그것을 하나의 메소드로 만듦
오늘날짜로 insert할거면 오늘 날짜로 insert하게 해주는 메소드도 따로 만들어서 적음
여기서 @Modifying, @Transactional이라는 어노테이션은 데이터베이스에 변동이 있는 쿼리의 메소드에다 명시해줘야함!
(예를들면 insert, update, delete등등등)
!주의 사용자 정의 sql을 만들 때에 insert into Orders(대소문자 구분)~~이렇게 명시하여
테이블 이름은 Entity클래스 이름과 일치시켜야 함 !!!!
ㄴOrdersService클래스 작성 (다오에서 직접 만든 쿼리들을 메소드에 포함시킴)
ㄴOrdersController작성
주의 여기서 insertOrders.html은 templates 폴더 안에 작성해야함!!!(상태유지하여 고객이랑 책 출력해야하니까)
타임리프 활용했기때문에 xmlns 태그 따로 속성 써주기
ㄴ마찬가지로 OrdersController에서 GetMapping("/listOrders")로 가는 findAll 메소드 선언 후
listOrders.html파일도 작성 가능
여기서 주의할 점은 custid, bookid는 참조키이기 때문에 그냥 o.bookid 나 o.custid로 하면 오류 남 !!!
근데 내가 여기서 보고싶은 것은 고객 번호, 책 번호가 아닌
고객 이름과 책 이름이 보고싶음 !!!!
그것을 하려면 jpa의 조인하여 출력하기를 써야함!
그럴 때는 데이터베이스의 뷰 (실제로 존재하는 테이블이 아닌 가상의 논리적 테이블)을 하나 만들어서
그 뷰의 속성은 조인하는 sql을 사용해서 넣고 그 뷰와 매칭되는 vo,dao,service,controller,html파일까지 만들어서
출력하면 됨 !!!!
뷰 생성 쿼리
create view view_ListOrders
as
select orderid, name, bookname, orderdate, saleprice, price
from orders o, customer c, book b
where o.custid=c.custid and
b.bookid=o.bookid;
select * from view_ListOrders;
ㄴ뷰 생성 결과
ㄴ생성한 뷰에 맞는 Entity 클래스 생성 (vo패키지 안에)
ㄴView_ListOrdersDAO 생성
ㄴView_ListOrdersService생성
ㄴOrdersController에 View_ListOrdersService를 멤버로 추가하여 뷰를 리스트형태로 뿌려주는 컨트롤러 메소드 생성
ㄴView_ListOrders.html생성
근데 난 여기서 orderid는 안 출력하고싶은데?
그러면 pk역할을 하는 속성 두개를 묶어서 jpa한테 알려줘야 함!
여기서는 고객이름과 책이름 두개를 묶어서 하나의 pk처럼 생각하도록 jpa한테 알려줘야함
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
그게 바로 jpa에서 복합 id설정하기(두개 이상의 컬럼으로 주식별자 설정하기)
Embeddable클래스 생성=>Entity클래스 생성(vo에다가) 다만 id설정은 @EmbeddedId라고 어노테이션 써줘야함!
=>dao, service, controller=>view 다만 찍을 때는 o.id.name이렇게 명시해줘야함
맨 처음에 주문번호가 없는 뷰를 또 하나 생성
ㄴvo 패키지에 Embedded클래스 생성 => 여기의 멤버 두개가 복합키로서의 pk역할을 한다고 알려주는 클래스임
ㄴvo패키지에 Entity클래스 생성 =>@EmbeddedId라는 어노테이션 꼭 추가
ㄴdao패키지에 View_ListOrderDAO2클래스 생성
주의할 점은 여기서는 더이상 PK자료형이 Integer가 아니라 앞에 vo패키지에서 생성했던
OrdersViewId라는 것임 !!!그래서 자료형을 저렇게 써줘야함 !!
ㄴservice패키지에 View_ListOrdersService2클래스 생성
ㄴOrdersController에 엔티티의 View_ListOrders2의 목적을 수행하는 메소드를 추가함
ㄴtemplates에 listOrders_view2.html생성
단, 여기서 name,bookname 가져올 때 저렇게 써야 함 !!!
-----------------------------------------------------------------------------------------------------------------------------------------------------------------카카오맵 api
jpajointest의 mapTest05.html참고하기 !! 페이징처리도 되어있음 !!!
'TIL' 카테고리의 다른 글
2022.06.29. 수요일 이공계 전문기술 연수사업 (Git) (0) | 2022.06.29 |
---|---|
2022.06.28. 화요일 이공계 전문기술 연수사업 (카카오 로그인 API, 아임포트 API, Jsoup, 향상된 자바스크립트 함수) (0) | 2022.06.29 |
2022.06.23. 목요일 이공계 전문기술 연수사업 (Thymeleaf, 스프링 인터셉터, 스프링 DATA JPA) (0) | 2022.06.24 |
2022.06.22. 수요일 이공계 전문기술 연수사업 (스프링 시큐리티,스프링 AOP,스프링 인터셉터) (0) | 2022.06.22 |
2022.06.21. 화요일 이공계 전문기술 연수사업 (스프링 스케쥴링, 스프링 시큐리티) (0) | 2022.06.22 |