Spring Mapper, 스프링 폼

김강산·2022년 11월 4일
0

Spring

목록 보기
10/13

<학습목표>
1. 계층형 쿼리
2. Mapper Interface
3. 스프링 폼

계층형 쿼리(Hierarchical Query)는 오라클에서만 지원하고 있는 아주 막강한 기능 중의 하나다
관계형(relational)이라는 의미가 서로 평등하고 수평적인 관계를 의미하는 반면 계층형(hirearchical) 구조는 이와는 다르게 평등한 관계가 아닌 계급적이고 수직적인 관계를 가진다
한마디로 말해서 관계형이 평면적이라 한다면 계층형은 수직적 구조라 할수있다

BOM(Bill Of Material)이란? 하나의 완제품이 만들어지는데 필요한 구성품목들의 내역 혹은 조합도를 말함
컴퓨터 구성도(BOM)

계층적 구조에서 사용되는 용어 정리

노드(node) : 원모양으로 표시된 항목을 노드라고 한다. 각각의 품목이 하나의 노드가 되면 실제 테이블에서는 하나의 로우에 대응
부모(parent) : 부모노드라고도 한다. 즉 트리구조에서 상위에 있는 노드를 말한다
자식(child) : 자식노드라고도 한다. 위 그림에서 '모니터'는 컴퓨터의 자식노드이며, 컴퓨터는 모니터와 본체의 부모노드가 된다
리프(leaf) : 리프노드라고도 한다. 더이상 하위에 연결된 노드가 없는 항목을 말한다. 즉 자식노드가 없는 노드라고 할 수 있으며 모니터, 프린터, 랜카드가 이에 해당된다
루트(root) : 계층형, 트리구조에서 최상위에 있는 노드를 말한다. 컴퓨터가 이에 해당
레벨(level) : 트리구조에서의 각각의 계층을 말한다 루트에 해당되는 '컴퓨터'가 1레벨이 되면, 순차적으로 그 하위에 있는 '모니터','본체' 등이 2레벨이 된다

계층형 쿼리의 작성


1) 일반 조인을 사용한 계층형 쿼리

데이블 개수가 하나이며 각각의 품목 정보들은 서로 부모와 자식 관계로 연결되어 있으므로 조인을 사용해야 하는데, 자기 참조 성격이 있으므로 셀프조인을 사용
루트노드에 해당하는 컴퓨터의 경우 가장 상위의 1레벨에 속하기 때문에 PARENT_ID컬럼 값이 NULL이다 그래서 최종 제품인 컴퓨터를 위해 외부 조인도 사용


=> 동일한 테이블인 BOM을 각각 bom1, bom2라는 별칭(alias)을 주어 셀프조인을 사용하였고, WHERE 절을 보면 알수있듯이 bom1이 하위 품목을, bom2가 상위품목을 나타냄을 알수있다 가장 상위 품목인 컴퓨터의 경우, 자신이 최상위 계층이고 PARENT_ID컬럼에 NULL이 들어가므로 외부조인을 사용하였다

=> 계층적인 순서로 결과가 나오긴했지만 계층형구조(트리구조)와는 조금 다른 결과이다.
예를 들어 본체의 하위 품목인 메인보드, 랜카드, 파워서플라이 품목이 프린터 바로 밑에 조회되어 마치 프린터의 하위품목인것처럼 보여진다

=> 이문제를 해결하기 위해 오라클에서 지원하는 계층형 쿼리를 살펴보자

2) START WITH ... CONNECT BY 절을 사용한 계층형 쿼리

START WITH ... CONNECT BY 절은 계층형 정보를 표현하기 위한 목적으로 오라클 8i부터 지원되기 시작.

  • PRIOR 키워드...
    본체의 PARENT_ID는 부모노드인 컴퓨터의 ITEM_ID와 연결되므로 PRIOR 키워드는 PARENT가 아닌 ITEM_ID앞에 붙여야한다

3) START WITH 조건1 ... CONNECT BY 조건2

  • START WITH 조건1 : 루트노드를 식별한다 조건1을 만족하는 모든 ROW들은 루트노드가 된다
    START WITH 절은 생략할수도 있는데 이러한 경우 모든 ROW들을 루트노드로 간주한다 조건1에는 서브쿼리도 올수 있다
  • CONNECT BY 조건2 : 부모와 자식노드들 간의 관계를 명시하는 부분이다
    조건2에는 반드시 PRIOR연산자를 포함시켜야하며, 이는 부모노드의 컬럼을 식별하는데 사용된다 START WITH과는 달리 조건2에서는 서브쿼리가 올 수 없다
  • PRIOR 연산자
    PRIOR 키워드는 오직 계층형 쿼리에서만 사용하는 오라클 SQL 연산자이다 키워드라고 표현했지만 실제로는 CONNECT BY절에서 등호(=)와 동등한 레벨로 사용되는 연산자이며 CONNECT BY절에서 해당 컬럼의 부모로우를 식별하는데 사용된다
    앞의 예에서 본체의 PARENT_ID 컬럼에는 컴퓨터의 ITEM_ID 값을 가지고 있으므로 PRIOR 연산자는 ITEM_ID앞에 붙게 된다
  • 레벨 의사컬럼(LEVEL Pseudocolumn)
    게층형 정보를 표현할 때 레벨을 나타낸다
    LEVEL도 일반적인 컬럼 처럼 SELECT, WHERE, ORDER BY 절에서 사용할 수 있다

<form:form> : 폼 요소 생성
<form:input> : 텍스트 필드 요소 생성
<form:password> : 패스워드
<form:textarea> : 텍스트 영역
<form:checkboxes> : 여러개 체크 박스
<form:checkbox> : 체크 박스
<form:radiobuttons> : 여러개 라디오버튼
<form:radiobutton> : 라디오 버튼
<form:select> : 셀렉트 박스
<form:hidden> : 숨겨진 필드
<form:label> : 라벨
<form:button> : 버튼
<form:errors> : 입력값 검증 오류 표시

<전자정부프레임워크 3.10>
Spring, Maven, log4j, ojdbc, dbcp2, common-fileupload, common-io 이 포함되어있다
Spring : DI(의존성 주입), Ioc(제어의 역전), PoJo, AOP 이있다
개발자의 편의성

wizwig에디터

  • summernote
  • ckeditor *

0개의 댓글