- . SQL에 XML 문자(<, > 같은)가 들어가는 경우 해결책은?
- . SQL이 너무 많아 statement의 id 만으로는 구분이 어렵다면?
- . 실제 수행되는 쿼리 정보를 콘솔 및 로그에 찍고 싶은데?
- . one-to-many 관계 구성중에 복합키를 넘겨야 할때
1. SQL에 XML 문자(<, > 같은)가 들어가는 경우 해결책은?
>> 두가지 방법이 있다. (1) XML의 CDATA 섹션 사용하거나
<statement id="getPersonsByAge" resultClass="examples.domain.Person"> |
(2) XML문자를 특수 엔터티 문자로 변환(AnyEdit 플러그인 사용하면 편함)
<statement id="getPersonsByAge" resultClass="examples.domain.Person"> |
2. SQL이 너무 많아 statement의 id 만으로는 구분이 어렵다면?
>> iBatis는 namespace 개념을 지원한다. sql-map-config.xml 에서 useStatementNamespaces 값을 true로 준다. 이제 SQL 정의 xml 파일을 여러개로 나누고 각 파일별로 적당한 namespace를 지정한다.
- sql-map-config.xml
<sqlMapConfig xmlns:fo="http://www.w3.org/1999/XSL/Format"> |
- SQL 파일에서 이렇게.
<sqlMap namespace="Sample"> |
- DAO 코딩 예("namespace.statement_id" 형식)
return getSqlMapClientTemplate().queryForList("Sample.getPersonsByAge", "30");
3. 실제 수행되는 쿼리 정보를 콘솔 및 로그에 찍고 싶은데?
>> log4j.properties 파일에 아래처럼 설정한다.
(log4j.logger.java.sql.Connection=DEBUG 는 반드시 있어야한다.)
<pre> log4j.logger.java.sql.Connection=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG log4j.logger.java.sql.ResultSet=DEBUG </pre> 아래 처럼 찍힌다. <pre> <DEBUG> sql.Connection : {conn-100003} Connection <DEBUG> sql.PreparedStatement : {pstm-100004} PreparedStatement: select user_id, password, name, user_type, user_group, regist_date, status from ws_user where user_id = ? <DEBUG> sql.PreparedStatement : {pstm-100004} Parameters: test1 <DEBUG> sql.PreparedStatement : {pstm-100004} Types: java.lang.String <DEBUG> sql.ResultSet : {rset-100005} ResultSet <DEBUG> sql.ResultSet : {rset-100005} Header: user_id, password, name, user_type, user_group, regist_date, status <DEBUG> sql.ResultSet : {rset-100005} Result: test1, test1, 테스트유저, U, 01, 20041204, A </pre> 4. one-to-many 관계 구성중에 복합키를 넘겨야 할때
예를 들면 다음처럼 1:M관계를 연결하는 부분이 있다.
<result property="comments" column="id" select="getCommentList" /> |
<result property="comments" column="{id=id,user.id=user_id}" select="getCommentList" /> |
여기서 {id=id,user.id=user_id} 값은
{넘겨받는 객체의 변수명=칼럼명,넘겨받는 객체의 변수명=칼럼명}
의 형식을 취하면 된다. 즉 , (comma)를 구분자로 사용하면 된다. 그럼 다음처럼 사용이 가능하다.
<statement id="getCommentList" parameterClass="comment" resultMap="get-comment-result"> |