'Lazy Load'에 해당되는 글 1건

  1. 2009.09.15 iBATIS Lazy Loading...!
iBATIS2009. 9. 15. 13:43
iBATIS로 조인을 해보려 했다.
일반적인 조인 쿼리로는 결과를 불러 오지를 못했다.
이때 필요한게 Lazy Loading...!
테이블의 구성은 A라는 테이블의 aa라는 컬럼이 PK로 지정이 되어있고..
B라는 테이블의 aa라는 컬럼이 A테이블의 aa컬럼의 FK로 지정, bb라는 컬럼이 B 테이블의 PK로 지정..
C라는 테이블의 bb라는 컬럼이 B테이블의 bb컬럼의 FK로 지정, cc라는 컬럼이 C테이블의 PK로 지정 되어있는 상태..
A테이블의 aa컬럼을 검색했을때  A 테이블 B 테이블 C 테이블이 모두 PK와 FK로 묶여 있으니 검색한 내용에 해당되는 모든 데이터를 보고싶었다.
그러기 위해서는 약간의 꼼수??가 필요했다.

우선 A테이블의 Java Model 부분코딩이다.
public class A{

    private String ...;
    private List<B> bList;

    public List<B> getBList() {
        return bList;
    }

    public void setBList(List<B> bList) {
        this.bList = bList;
    }
}

A클래스의 필요한 프로퍼티들을 선언하고 프로퍼티 부분 마지막을 보면 List가 추가되어있다.
바로 A테이블을 검색했을때 B테이블의 내용들을 담기위한 List인 것이다.
그다음 A테이블의 SqlMap부분이다.

<resultMap id="aResult" class="a">
        <result property="..." column="..."/>
        <result property="bList" column="aa" select="bb.selecBbByAa"/>
</resultMap>

B의 SqlMap에가서 selectBbByAa의 쿼리문을 만들어 주자..

<select id="selectBbByAa" parameterClass="string" resultMap="bResult">
     select *
       from B
      where aa=aa
</select>

ResultMap에 모델 객체와 똑같이 매핑을 시켜주면..쿼리문을 실행하고 ResultMap에 매핑된대로 결과값을 넘겨줄때..
bList부분은 B테이블에 쿼리를 실행한 결과를 넣어서 넘겨주게 된다.
이제 C테이블의 것도 가지고 와야 하는데...뭐 방법은 똑같다.
B 모델에 C 모델의 리스트를 프로퍼티로 선언해주고...B 의 SqlMap파일에 가서 ResultMap에 cList를 추가해주고 뒤에 select문을 넣어주면 된다. C의 SqlMap파일에가서 쿼리문을 만들어 주는건 당연한 것이고...
이제 A테이블에 있는 정보를 한건이 됐든 여러건이 됐든 iBATIS에서 쿼리를 하게 되면 알아서 자동적으로 다 딸려오게 되어있다.
가지고온 데이터를 처리하는 방법은...List로 가지고 오니 알아서 처리하면 될것...ㅋ
일단 가지고 오는지 가지고 오지 못하는지 시험하기 위해 짜놓은 코드...

        A a = this.aService.listAByAa("aa");
        List<B> bList = a.getBList();
        for(int j = 0;j < bList.size();j++){
            B b = new B();
            b = bList.get(j);
            List<C> elevatorList = b.getcList();
            for(int x = 0;x < cList.size();x++){
                C c = new C();
                c = cList.get(x);
            }
        }

위의 코드는 객체로 가져와 리스트를 가져오고 또다시 각가의 객체를 가져온다음 또다시 리스트를 가지고 오는 방식이다.
지금은 한건만을 가지고 오기 때문에 객체로 받았지만 여러건을 가지고 올때는 객체로 받지않고 리스트로 받을수도 있다.
설명 부분에 있어서 뭔가 부족한 부분이 많은것 같다..
이제 이값을 BlazeDS로 Flex로 넘기고 또 그 값을 처리하는걸 알아내자...!

'iBATIS' 카테고리의 다른 글

iBatis 주의사항..두번째  (0) 2014.09.16
iBatis 주의사항..  (0) 2014.09.01
iBatis로 insert한 후 설공 여부 알아오기.  (0) 2012.06.27
iBatis DTD 오류..!  (0) 2011.07.15
MSSql - iBatis에서 Insert후 Seq값 Return하기.  (0) 2011.07.01
Posted by Z700zZz