본문 바로가기

Programming/iBatis

ClassMap을 이용한 복합(Complex) Properties ClassMap을 이용한 복합(Complex) Properties이것은 선호하는 데이터와 클래스를 로드하는 방법을 알고있는 맵핑된 statement와 함께 관련된 resultMap프라퍼티에 의해 복합타입의 프라퍼티(사용자에 의해 생성된 클래스)를 자동적으로 생성하는 것은 가능하다. 데이터베이스내 데이터는 언제나 복합프라퍼티는 관계의 “many side”로부터이고 프라퍼티 자신은 관계의 “one side”로 부터이다라는 것을 고정하는 클래스에서 1:1관계 또는 1:M관계를 통해 표현된다. select * from PRODUCT where PRD_ID = #value# select * from CATEGORY where CAT_ID = #value# 위 예제에서 Product의 인스턴스는 Category타입.. 더보기
iBatis - selectKey (자동생성키) 자동 생성 키많은 관계형 데이터베이스 시스템은 기본키(primay key)필드의 자동생성을 지원한다. SQL Map은 요소의 를 통해 자동생성키를 지원선생성키(pre-generated - 오라클의 sequence) 와 후생성키(post-generated - MS-SQL의 @@identity)를 지원 선생성키의 예 (Oracle)SELECT STOCKIDSEQUENCE.NEXTVAL AS ID FROM DUALinsert into PRODUCT (PRD_ID,PRD_DESCRIPTION)values (#id#,#description#) 간혹 Sequence를 이용하지 않고 아래와 같이 Max+1로 사용하기도 하는데 이는 사용하기에 적합하지 않다.(SELECT NVL(MAX(PRD_ID), 0) + 1 FR.. 더보기
iBatis - Iterate Iterate - collection을 반복하거나 리스트내 각각을 위해 몸체부분을 반복 Iterate Attributesprepend – the statement에 붙을 오버라이딩 가능한 SQL부분 (옵션)property – 반복되기 위한 java.util.List타입의 프라퍼티 (필수?)open – 반복의 전체를 열기 위한 문자열, 괄호를 위해 유용하다. (옵션)close – 반복의 전체를 닫기 위한 문자열, 괄호를 위해 유용하다. (옵션)conjunction – 각각의 반복 사이에 적용되기 위한 문자열, AND 그리고 OR을 위해 유용하다. (옵션) java.util.List 타입의 프라퍼티 반복사용법 예제:username=#userNameList[]# 위와 같이 사용되었을 경우 아래와 같은 쿼리로 .. 더보기
QueryForList와 QueryForMap의 차이 예 queryForList와 queryForMap의 차이점 select * from user 1. queyForList 경우 List list = sqlMapClient.queryForList("user.select",map); 결과 : {id=a,name=aa} {id=b,name=bb} {id=c,name=cc} 2. queryForMap 경우 Map resultMap = sqlMapClient.queryForMap("user,select",map,"id"); 결과 : a={id=a,name=aa} b={id=b,name=bb} c={id=c,name=cc} resultMap 에는 미리 지정한 "id" 에 해당하는 값이 key 로 되고 값이 result 로 지정한 객체가 입력되었음을 알 수 있다. que.. 더보기
QueryForObject, List, Map queryForObject() 메서드 데이터베이스로 부터 한 개의 레코드를 가져다가 자바 객체에 저장 한다. public Object queryForObject(String id) throws SQLException; public Object queryForObject(String id, Object parameter) throws SQLException; 디폴트 생성자를 가진 객체를 생성(보편적 방법) 디폴트 생성자가 없으면 throws "런타임 예외" public Object queryForObject(String id, Object parameter, Object result) throws SQLException; 반환하는 값으로 사용될 객체를 받음 결과값 -> 파라미터의 형태로 객체에 지정 생성자.. 더보기
iBatis - 동적쿼리 JDBC를 사용해서 직접적으로 작동할 때 매우 공통적인 문제는 동적 SQL이다. 파라미터값 뿐만 아니라 파라미터와 칼럼이 모두 포함된 변경을 하는 SQL문에서 작업을 하는 것은 매우 어렵다. 전형적인 해결법은 조건적인 if-else문과 지겨운 문자열 연결 덩어리를 사용하는 것이다. 요구되는 결과는 종종 쿼리가 예제 객체와 유사한 객체를 찾기위해 빌드될수 있는 예제에 의해 쿼리된다. SQL Map API는 어떤 맵핑된 statement요소에 적용될수 있는 상대적으로 훌륭한 해결법을 제공한다. 이것은 간단한 에제이다. SELECT * FROM ACCOUNT WHERE ACC_ID = #id# ORDER BY ACC_LAST_NAME 위 예제에서 파라미터빈의 “id”프라퍼티의 상태에 의존해서 생성될수 있는 두.. 더보기
Mapped Statements 맵핑된(Mapped) Statements SQL Maps 개념은 맵핑된 statement에 집중한다. 맵핑된 statement는 어떠한 SQL문을 사용할수도 있고 파라미터 maps(input)과 result maps(output)를 가질수 있다. 만약 간단한 경우라면 맵핑된 statement는 파라미터와 result를 위한 클래스로 직접 설정할수 있다. 맵핑된 statement는 메모리내에 생산된 results를 캐슁하기 위해 캐쉬 모델을 사용하도록 설정할수도 있다. Statement Type XML에 정의하는 SQL 문장 중에 XML에서 사용되는 문자( 등)가 포함되는 경우 아래와 같이 CDATA를 사용한다. SELECT * FROM PERSON WHERE AGE > #value# ]]> Auto-Ge.. 더보기