본문 바로가기

Web Programming

Spring JDBC 사용하기 : 제 2 탄, 쿼리 날리기

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
JDBC 를 통해서 하던일 중에 가장 짜증나던 SQL Exception Handling 문제를 해결하고 나니 다음으로 기다리고 있는 것은 자주 반복되는 SQL 문 노가다 였다. 그걸 좀 쉽고 가독성있게 처리하는 방법이 있어서 따라 해 보았다.

MeassageSourceAcessor 라는 클래스를 이용해서 미리 정의해 놓은 쿼리들을 가져다가 쓰는 것이다. 예상보다 아주 간단하게 할 수 있었고 코드를 고치지 않아도 조금씩 확장해서 쓸수 있는 것이 인상적이었다.

SQL 문법과 자바 소스와 아예 분리를 시키므로서 SQL 코드를 뒤져야하는 상황이 줄어들며 나중에 협업을 할때도 SQL 문을 따로 DBA가 작성을 해줘도 될것 같다.

<bean name="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
  <property name="basenames">
   <list>
    <value>dbQuery</value>
    <value>Messages</value>
   </list>
  </property>
 </bean>
 <bean name="messageSourceAccessor" class="org.springframework.context.support.MessageSourceAccessor">
  <constructor-arg>
   <ref bean="messageSource"/>
  </constructor-arg>
 </bean>

여기서 두가지 객체가 필요한데 하나는 ResourceBundleMessageSource 라는 클래스이고 나머지 하나는 MessageSourceAccessor 라는 클래스이다. MessageSourceAccessor 는 긴말 할것없이 어떤 메세지를 연결해주는 넘이다. 어떤 약속된 명칭을 사용해서 해당 소스에 접근하게 해준다. 여기서는 messageSource 라는 객체에 접근을 한게 된다. messageSource 는 따로 dbQuery.properties 라는 파일에 접근하도록 한다.

article.insert = INSERT INTO BOARD VALUES (?,?,?,?,?,?,?,?)
article.delete = DELETE FROM BOARD WHERE BOARDNO=?

단순히 이렇게 적혀 있는 것이 전부인 dbQuery '?' 라는 기호를 사용해서 JDBC 프로그래밍을 하던 것을 떠올리고 나니 얼추 이해가 가기 시작했다 -_-; 가장 중요한 것은 이렇게 jdbcTemplate 를 이용하는가 하는 문제다.

아래는 ArticleDao 라는 클래스에서 하는 일이다.

 public int insert(Article article) {
  return getJdbcTemplate().update(
    getMessageSourceAccesor().getMessage("article.insert"),
    new Object[] { article.getBoardNo(), article.getTitle(),
      article.getName(), article.getEMail(),
      article.getPassword(), article.getCreateDate(),
      article.getContent(), article.getHitCount() });
 }

JbdcTemplate 객체의 update() 메소드를 호출한다. article.insert 라고 정의 되어있는 메시지를 불러와서 Object 배열에 정의 되어있는 대로 필드값을 채우는 일을 한다. 저러고 나니 굳이 SQL 문이 없어도 자주 사용하는 SQL문을 만들어두어 쓰면 아주 간단하다. 유후 ^^ ㅋㅋ