z

BLOG ARTICLE iBATIS | 5 ARTICLE FOUND

  1. 2010.01.26 iBatis JDBC 설정.
  2. 2009.07.31 iBatis Connection reset error
  3. 2009.05.13 iBatis DDL 사용
  4. 2009.04.14 iBatis SelectKey 1
  5. 2008.01.31 iBatis에서의 CLOB, BLOB 처리

iBatis JDBC 설정.

개발/DB 2010. 1. 26. 20:22
AND

증상 :  서버 IDLE 시간이 지속되면서 쿼리 수행 시 디비 연결이 뒈짐.

해결: sqlmap-config.xml에 다음의 속성 추가

<dataSource type="DBCP"> <-- 데이터 소스는 SIMPLE, JNDI가 아닌 DBCP로 설정
<property name="Pool.ValidationQuery" value="select SYSDATE from DUAL"/>

일정 간격으로 DB에 쿼리를 날려 연결 끊겼으면 풀에 있는 커넥션을
복구하는 메카니즘 인듯함.

commons-dbcp,
commons-pool,
commons-collection 세개의 라이브러리가 필요

http://commons.apache.org 에서 다운로드
AND

iBatis DDL 사용

개발/DB 2009. 5. 13. 16:54


* com.ibatis.dao.client.template.SqlMapDaoTemplate.queryForObject("service.createSeqTable");  // Query실행 시.

* Object가 이미 존재할 경우 ORA-00955

* Dynamic Query를 이용해 좀더 활용 가능할 듯.

* 아래는 일자별 시퀀스 테이블 생성과, 시퀀스 조회 함수 생성 예

* Server App 초기화 시 사용해 볼 수 있을듯.

<statement id="createSeqTable">
 CREATE TABLE NET_DAILYSEQ ( FDTSEQ CHAR(8), FSEQ NUMBER)
</statement>

<statement id="createSeqFunction">

 CREATE OR REPLACE FUNCTION GET_DAILYSEQ RETURN NUMBER IS
 PRAGMA AUTONOMOUS_TRANSACTION;
 vFseq NUMBER;
 BEGIN

    vFseq := -1;

     SELECT  
      NVL(MAX(FSEQ),0)+1 AS FSEQ into vFseq
     FROM NET_DAILYSEQ
     WHERE
  FDTSEQ = TO_CHAR(SYSDATE,'YYYYMMDD');
   
    
       MERGE INTO NET_DAILYSEQ A
       USING
  (
      SELECT NVL(MAX(FDTSEQ),TO_CHAR(SYSDATE,'YYYYMMDD')) FDTSEQ, vFSEQ as FSEQ
      FROM NET_DAILYSEQ
      WHERE FDTSEQ = TO_CHAR(SYSDATE,'YYYYMMDD')
     
  ) B
    ON (A.FDTSEQ = B.FDTSEQ)
       WHEN MATCHED THEN
     UPDATE SET A.FSEQ = B.FSEQ
       WHEN NOT MATCHED THEN
     INSERT VALUES (B.FDTSEQ, B.FSEQ);
   
    COMMIT;       

    RETURN vFseq;
   
    EXCEPTION
      WHEN NO_DATA_FOUND THEN
        NULL;
      WHEN OTHERS THEN
        RAISE;
 END GET_DAILYSEQ;

</statement>

AND

iBatis SelectKey

개발/DB 2009. 4. 14. 11:58

    <insert id="insert" parameterClass="map">

//여기 resultClass에 지정된 데이터 타입으로 키 반환..
        <selectKey resultClass="String" keyProperty="seq">
              SELECT TO_CHAR(NVL(MAX(seq), 0)+1, '00000000') FROM TARGET
        </selectKey>

        INSERT INTO TARGET  ( SEQ,  FILED1, FILED2,............... )
        VALUES  (  #seq#,  #field1#, #field2#, ...... )

</insert>
AND


iBatis에서 Oracle CLOB, BLOB 넣고 빼기
 
우선 자바빈의 경우

class Data{
    byte[] blobField;
    String clobField;
}

데이터 Insert시 insert into table values( #blobField:BLOB#, #clobField:CLOB#) 로 넣으면 됨. 파리미터 맵을 써도 됨.
 
데이터 select 시 select blob, clob from table에서 resultClass로는 안 받아짐.
따로 resultMap을 써서 아래와 같은 매핑이 필요
 
<resultMap id="result" class="beanClassName">
  <result property="clobField" column="clobField" jdbcType="CLOB"/>
  <result property="blobField" column="blobField" jdbcType="BLOB"/>
</resultMap>

http://wiki.dev.daewoobrenic.co.kr/mediawiki/index.php/Ibatisclobblob
AND