iBATIS2014. 9. 16. 11:18

 동일한 구조의 여러개의 테이블이 아닌 서로 다를 구조의 테이블들의 데이터를 합쳐서 출력 해야하는 경우가 생긴다.

그럴 때 테이블 마다 비슷한 컬럼으로 쿼리를 해놓고 UNION이나 UNION ALL로 쿼리한 결과를 합친후 원하는 조건을 넣어 결과값을 얻게 된다. 하지만 이때 UNION이나 UNION ALL로 합친 결과값에 WHERE절로 조건을 넣었을 때 그 조건절이 적용이 안될경우가 있다. 분명 쿼리를 실행했을때 결과값이 정상 출력 되는걸 확인 할 수 있지만..실제로 소스 빌드 후 나오는 결과값은 아무 값도 안나오는 상황 발생. 입력 값의 CharacterSet이 달라 깨진 문자열이 입력돼 결과값이 제대로 출력되지 않는건가 싶어 입력 할때마다 체크를 해봐도 그런 문제는 아니었다. 그래서 최후의 방법으로 UNION이나 UNION ALL하기전..테이블을 합치기 전에 조건절을 넣어보니 제대로 나오는 것..

 SQLDeveloper나 여타 다른 IDE에서 실행되어 나오는 값과 실제 iBatis에서 실행 되어 나오는 값은 다를수도 있다. 결론은 myBatis를 쓰자. 이미 iBatis로 짜놓은 소스 언제다 myBatis로 바꾸나..

'iBATIS' 카테고리의 다른 글

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
iBATIS Lazy Loading...!  (0) 2009.09.15
Posted by Z700zZz
iBATIS2014. 9. 1. 20:01

iBatis를 사용하여 개발을 진행하다가 파라미터로 Map을 넘겨줄때가 있다.

이때 쿼리문 안에 #KeyValue#로 파라미터를 넣어주게 되는데..

KeyValue값이 대소문자를 가린다.

소문자로 되어있는 키값을 대문자로 써넣고 왜 값이 안나오나 null값만 리턴을 하나 죽어라고 디버깅 했는데..

결론은 대소문자를 구분하네.

대소문자 구분..주의 하도록 하자..

'iBATIS' 카테고리의 다른 글

iBatis 주의사항..두번째  (0) 2014.09.16
iBatis로 insert한 후 설공 여부 알아오기.  (0) 2012.06.27
iBatis DTD 오류..!  (0) 2011.07.15
MSSql - iBatis에서 Insert후 Seq값 Return하기.  (0) 2011.07.01
iBATIS Lazy Loading...!  (0) 2009.09.15
Posted by Z700zZz
iBATIS2012. 6. 27. 17:18

블로그를 처음 시작 하면서 iBatis로 insert한 후 입력된 데이터의 pk값을 가져오는 법을 포스팅 했었다.


그게 벌써 몇년전인지..내가 저런글을 썼나 싶을 정도로 오래(?)..


이번은 시퀀스 값이나 pk값이 아닌 그저 성공여부를 가져오는 법을 포스팅 하려한다.


방법은??


간단하다 insert메소드가 아닌 update메소드로 insert쿼리를 실행하면 결과 값으로 성곤한 row의 값이 리턴 값으로 넘어오게 된다.


성공하면 1, 성공하지 못하면 0.


원래 그냥 selectKey를 이용해서 시퀀스나 PK값을 가져오지 않으면 Null을 리턴하게 되어있다.


위와같은 방법으로 시퀀스가 필요 없을 때 값이 제대로 들어갔는지 확인이 가능하다.

'iBATIS' 카테고리의 다른 글

iBatis 주의사항..두번째  (0) 2014.09.16
iBatis 주의사항..  (0) 2014.09.01
iBatis DTD 오류..!  (0) 2011.07.15
MSSql - iBatis에서 Insert후 Seq값 Return하기.  (0) 2011.07.01
iBATIS Lazy Loading...!  (0) 2009.09.15
Posted by Z700zZz
iBATIS2011. 7. 15. 00:35
요즘 진행하고 있는 프로젝트의 서버를 담당하게 되어 Spring Framework 와 iBatis를 이용하여 만들고 있는 중이다.

막바지인 오늘 아무 이유 없이 스샷과 같은 현상이 일어났다.


난 한게 아무 것도 없는데...-_-;;


보면 Java파일에는 오류 표시가 없고 iBatis 쿼리 정보를 담고 있는 XML파일에만 있는 것을 볼 수가 있다.


검색을 해봤더니...


XML파일 위의 DTD선언 부분에 문제가 생긴거란다.


<!DOCTYPE sqlMap
    PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
    "http://www.iBATIS.com/dtd/sql-map-2.dtd">


이렇게 되어 있는것은 아래오 같이 바꿔 주면된다.


<!DOCTYPE sqlMap
    PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
    "http://ibatis.apache.org/dtd/sql-map-2.dtd">


바뀐 부분은 www.iBATIS.com을 ibatis.apache.org로 바꿔주면 해결 된다.


왜 이런 문제가 발생한지는 좀더 찾아봐야 할듯..

'iBATIS' 카테고리의 다른 글

iBatis 주의사항..두번째  (0) 2014.09.16
iBatis 주의사항..  (0) 2014.09.01
iBatis로 insert한 후 설공 여부 알아오기.  (0) 2012.06.27
MSSql - iBatis에서 Insert후 Seq값 Return하기.  (0) 2011.07.01
iBATIS Lazy Loading...!  (0) 2009.09.15
Posted by Z700zZz
iBATIS2011. 7. 1. 12:13
데이터 베이스에 데이터를 Insert한 후 Insert한 데이터의 Seq값 얻어 오기.

먼저 Insert실행후 selectKey를 이용하여 Seq의 값을 Return한다.

<insert id="insertTrim" parameterClass="map" >
          INSERT
              DataBase Name
              (Column Name)
          VALUES
              (Insert Values)
             
           <selectKey keyProperty="id" resultClass="int">
             SELECT @@IDENTITY
         </selectKey>
         
          <![CDATA[
        ]]>   
</insert>

'iBATIS' 카테고리의 다른 글

iBatis 주의사항..두번째  (0) 2014.09.16
iBatis 주의사항..  (0) 2014.09.01
iBatis로 insert한 후 설공 여부 알아오기.  (0) 2012.06.27
iBatis DTD 오류..!  (0) 2011.07.15
iBATIS Lazy Loading...!  (0) 2009.09.15
Posted by Z700zZz
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