캠핑과 개발


기존에 편리하게 사용하던 iBATIS 2.3.0.677 버전을 최신버전인 2.3.4.726 으로 수정했습니다.
사이트 개편이 있어서 바인딩 로그를 볼까해서 2.3.0.677 버전을 사용하니 Exception이 나네요.

Exception 내용은 다음과 같습니다.
Caused by: com.ibatis.common.beans.ProbeException: There is no READABLE property named...

원인은 링크 클릭하시면 볼 수 있습니다.   
http://cafe.naver.com/nautes74.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=132
 
수정된 소스파일과 jar 파일 함께 올립니다.
수정내역은 원본 소스 받아서 비교해보시면 됩니다.
사용법은 이전 버전과 같습니다.

이번에 프로젝트를 하면서 동일한 성격의 테이블이 여러개라 하나의 쿼리를 두고 테이블 명과 몇가지 다른 컬럼에 대해서는 동적으로 생성해서 가져오게 했다..
하지만 몇번 재대로 실행이 되는가 싶더니 테스트 진행 과정에서 컬럼을 가져오지 못하는 현상이 발생했다. 

일단은 혹시나 모를 문제가 있지 않을까 해서 쿼리를 분리하고 동적으로 생성되어야 되는 부분은 쿼리를 따로 작성해서 select 하도록 하였다.

후에 이 문제에 대해서 살펴봤더니 원인은 ibatis가 매핑 정보를 캐싱하기 때문이라고 한다.

이문제를 해결하려면 다음과 같이 사용할수가 있다.

<select id="select" remapResults="true" parameterClass="dataMap" resultClass="dataMap">
 SELECT  
     bbs_seq
    ,title
    ,contents
    ,register_date
   <isEqual property="table" compareValue="photo_gallery">
       ,image_name
       ,image_path
       ,image_size
  </isEqual>      
FROM $table$
<include refid="globalWhere" />
</select>

다음 코드는 일반적으로 같은 내용을 담고 있지만 photo_gallery 테이블인 경우는 image_name, image_path, image_size 컬럼을 동적으로 생성해서 가져오는 쿼리이다.
일반적으로는 파일 테이블을 따로 두겠지만 예제를 설명하기 위해서 위와 같이 하였다..

위에 테이블에서 remapResults="true" 부분이 없을 경우 위에서 설명한 에러가 발생할수가 있다 하지만 이부분을 넣어 주면서 쿼리를 가져올때 매번 새로 생성한 쿼리를 가져오기 때문에 다음부터는 동적으로 컬럼을 가져오면서 발생한 에러를 해결 할 수가 있다. 


ibatis 작업중 로그를 보여줍니다.


사용법 
1. ibatis-2.3.0.677.jar 파일을 WEB-INF/lib 폴더 아래로 복사합니다.
2. log4j.properties 파일에 다음 줄을 추가해줍니다.

log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG

간혹 안나오는 경우는 log4j.jar 파일이 WEB-INF/lib 폴더에 존재하는지 확인하기 바란다.