Search

'전체 글'에 해당되는 글 92건

  1. 2012.04.18 iBatis RowHandler
  2. 2012.04.18 iBatis ResultMap 상속
  3. 2012.04.18 Spring Event

iBatis RowHandler

Java/iBatis 2012. 4. 18. 11:34 Posted by 퓨어레드

iBatis RowHandler

-       개발팀 남한희 대리

1.     iBatis RowHandler ..

A.     용량 또는 레코드 수가 많은 레코드셋을 처리할수 있는 방법

B.      레코드를 한번에 다 가져오지 않고 레코드 하나하나씩을 핸들러에서 처리하는 방식

C.      iBatis 특성상 Recordset 을 모두 List 에 저장해야 되는 단점을 극복할수 있는 방법

D.     List 에 전부 저장하지 않고 바로바로 처리 하여 메모리를 절약할수 있고 실행 속도 또한 절약 할 수 있다.

 

 

2.     핸들러 만들기

A.     핸들러 클래스는 com.ibatis.sqlmap.client.event.RowHandler 를 구현해야 한다.

B.      RowHandler 인터페이스의 void handleRow (Object valueObject) 를 구현한다.

C.      handleRow 에 넘어오는 valueObject ResultMap 에 해당하는 Class 가 리턴한다.
해당 클래스로 캐스팅하여 데이터를 처리한다.

D.     핸들러 클래스는 생성을 하여 iBatis 에 넘기는 구조이기 때문에 다른 여러 부가적인 처리가 가능하다.


 

3.     핸들러 호출

A.     핸들러 클래스를 생성한 다음 sqlMapClient 함수중 queryWithRowHandler 를 호출한다.

B.      queryWithRowHandler ([Select ID], [Parameter Data], [RowHandler Interface]);

C.      로우 핸들러는 당연히 Select ID 에만 매칭이 된다.

D.     queryWithRowHandler ("res.getsResource", sData, rowHandler);

 

 

4.     스프링에서의 호출

A.     스프링의 getSqlMapClientTemplete () 에는 해당 함수가 없다.

B.      그러기에 getSqlMapClient () 를 호출하여 직접 sqlMapClient 에 접근하여 호출한다.

 

'Java > iBatis' 카테고리의 다른 글

iBatis resultMap 의 select 중 column 을 여러 컬럼을 주고 싶을 때...  (0) 2012.06.13
iBatis Cache 모델  (0) 2012.04.18
iBatis ResultMap 상속  (0) 2012.04.18

iBatis ResultMap 상속

Java/iBatis 2012. 4. 18. 11:34 Posted by 퓨어레드

iBatis ResultMap 상속

-       개발팀 남한희 대리

1.     상속과 구성의 차이점을 명확하게 알자!!

A.     상속은 상위를 포함한 하위 확장 개념

B.      구성은 상위를 내포한 포함 개념 (말이 이상하다 따로 설명해야 할 듯..)


2.     ResultMap 상속의 개념

A.     ResultMap 을 상속하는 개념은 비슷한 기존 ResultMap 에서 확장된 ResultMap 이 있을 경우,  코드량을 줄이고 기존 ResultMap 에서 확장된 ResultMap 을 사용 할 경우 사용함


3.     예시

A.     코멘트, 첨부파일, 도메인 모델 등에서 사용

                         i.         코멘트 : 코멘트의 경우 보통 일련번호, 작성자, 내용 등 많은 내용이 비슷하고 이에 FK만 달라지는 경우가 많다. 이럴 경우 공통 ResultMap 에 들어가는 필드는 테이블에 맞춰주고 달라지는 부분만 상속으로 처리한다. (첨부파일도 마찬가지)

                        ii.         도메인 모델 : 기본 ResultMap 을 만들고 추가되는 Domain 모델이 있다면 이 항목을 기본 ResultMap 을 상속받고 추가되는 Domain 모델을 확장하여 ResultMap 을 구성한다.
도메인 모델에선 상속된 ResultMap 으로 데이터를 주입받아 속도 개선에 도움을 준다
.


4.     문법

A.     상속 받는 ResultMap extends=”상위ResultMapID”

B.      기본 ResultMap
<resultMap class="ResellerVo" id="ResellerRm">
<
result property="resellerID" column="resellerID" jdbcType="VARCHAR" />
</resultMap>

C.      ResultMap 상속
<resultMap class="ResellerDm" id="ResellerDmRm" extends="ResellerRm">
<
result property="companys" column="{resellerID=resellerID}" select="company.getsGwCompany" />
</resultMap>

D.     기타

                         i.         하위 ResultMap  에 들어가는 Vo Class 가 상위 ResultMap 에 들어가는 Vo Class 와 꼭 상속 관계일 필요는 없다. (ResultMap 에서만 상속관계이지 실제 클래스가 상속관계일 필요는 없다는 것)


 

 

iBatis 하위 ResultMap 결정

 

5.     선택 가능한 하위 ResultMap

A.     특정 조건으로 하위 ResultMap 을 결정 할수도 있다.

B.      조건은 상위 ResultMap 에서 결정한다.

C.      특정 컬럼의 값으로 하위 ResultMap 을 결정한다.

6.     문법

A.     <resultMap class="ResellerVo" id="ResellerRm">
<result property="resellerID" column="resellerID" jdbcType="VARCHAR" />         
<result property="resellerName" column="resellerName" jdbcType="VARCHAR" />
<result property="regDate" column="regDate" jdbcType="VARCHAR" />

<discriminator column="TYPE" javaType="string">
<subMap value="Book" resultMap="ResellerRm2" />
<subMap value="News" resultMap="ResellerRm3" />
</discriminator>


</resultMap>

B.      Select 가 된 컬럼중 TYPE 이라는 컬럼의 값이 Book 이면 ResellerRm2 을 선택하고
News
라면 ResellerRm3 를 선택함


C.      하위 Resultmap 을 결정 구분을 사용 할 경우 구분 할 수 있는 컬럼이 있어야 한다.

D.     만약 구분 할 수 있는 컬럼이 없다면 alias 를 이용한다.

                         i.         Select field1, field2, field3, ‘Book’ as TYPE FROM TestTable

 

 

'Java > iBatis' 카테고리의 다른 글

iBatis resultMap 의 select 중 column 을 여러 컬럼을 주고 싶을 때...  (0) 2012.06.13
iBatis Cache 모델  (0) 2012.04.18
iBatis RowHandler  (0) 2012.04.18

Spring Event

Spring/Base 2012. 4. 18. 11:32 Posted by 퓨어레드

Spring Event

-       개발팀 남한희

1.     이벤트 란 무엇일까!!?

A.     이벤트란 사건! 한 객체를 기준으로 데이터가 변경되거나 상황이 변경 되었을 때 사건을 발생시켜 다른 클래스에서 이를 알도록 해주는 방식이다.

B.      윈도우는 이벤트 방식의 프로그래밍을 한다. 버튼이 클릭되었다, 화면이 지워졌다, 마우스가 움직인다 등의 이벤트가 정의 되어 있고, 이 이벤트를 잡아서 프로그래밍을 진행한다.


2.     이벤트의 구현

A.     이벤트 구현은 언어 단에서 지원을 해주는 부분이 있고, 자체적으로 구현을 해야 하는 경우가 있다.

B.      언어 레벨에서 지원을 해주는 언어는 C#! 델리게이터 라는 구분이 있어서 이벤트를 추가하거나 삭제 할수 있다.

C.      자바는 언어 레벨에서의 이벤트를 지원하지 않는다. 그렇기 때문에 이벤트 중심의 프로그래밍을 할 경우 이벤트 처리 엔진이 있어야 한다. 보통의 이벤트 처리 엔진은 디자인 패턴중 옵져버 패턴으로 구성된다. (옵저버 패턴은 따로 알아보기 바람)


3.     Spring Level Event

A.     Spring 에서는 ApplicationContext 에서 이벤트를 사용 할 수 있도록 지원해준다.

B.      Event 를 사용하기 위해선 3가지 구성 요소가 필요하다.

                         i.         이벤트 발생 Bean (옵저버 패턴중 Subject)

                        ii.         이벤트

                       iii.         이벤트 처리 Bean

 

 

 

4.     Spring Level Event 사용 절차

A.     Bean 이 이벤트를 발생시킬지 유무를 결정한다.

B.      발생시킴을 결정하면 발생시킬 이벤트 객체를 만든다.

                         i.         이 객체는 ApplicationEvent 를 상속 받는다. (org.springframework..context.ApplicationEvent)

                        ii.         만약 Event 처리에 추가 데이터가 있다면 추가 데이터를 만들어준다.

public class G2ApplicationEvent extends ApplicationEvent
{
	protected G2EventType eventType;
	protected Object eventData;

	// .. getter/setter 구현, 생성자 구현
}



C.      이벤트 발생 Bean 에서 이벤트 발생 타이밍에서 이벤트를 발생시킨다.

                         i.         이벤트 발생 Bean 에선 먼저 ApplicationContext 를 주입받는다.
@Autowired ApplicationContext applicationContext;
(
주의 : WebApplicationContext 를 주입받아도 되지만 JUnit 테스트에 문제가 있음)

                        ii.         이벤트 발생은 ApplicationContext publishEvent 를 이용한다.
applicationContext.publishEvent (new MyEvent (this, data);

D.     이벤트 처리 Bean 에서 처리할 이벤트를 구현함

                         i.         ApplicationListener implements 한다.

                        ii.         ApplicationListener 은 제너릭 타입이기 때문에 수신 할 이벤트를 적어준다.
implements ApplicationListener<MyEvent>

                       iii.         ApplicationListerner onApplicationEvent(<T> arg0) 을 구현한다.

@Override
public void onApplicationEvent (MyEvent myEvent)
{
// 해당 이벤트 처리를 해준다.
}

                       iv.         만약 여러 이벤트를 처리 할 경우 해당 이벤트로 ApplicationListener 을 추가 구현한다.

                        v.         추가 구현시 당연히 onApplicationEvent 역시 추가되어야 한다.

                       vi.         이벤트를 구분하는 데이터는 onApplicationEvent 의 아규먼트 클래스 타입으로 구분한다. 또한 같은 인터페이스를 제너릭으로 달리 여러 번 구현하기 때문에 주석을 잘 달아주어 해당 이벤트 핸들러가 하는 일을 정확히 명시하도록 한다.!

 

'Spring > Base' 카테고리의 다른 글

Task, Scheduler 등록  (0) 2012.04.18