티스토리 뷰

유니콘

Unicorn3에서 쿼리를 추가

wewin 2009. 8. 17. 21:58

Unicorn3에서 돌아가는 모든 쿼리는 /WEB-INF/conf/sql-def.xml 에 있으며,

모든 테이블 스키마는 /WEB-INF/conf/schema.xml 에 들어있습니다

 

SQL 추가설명

 sql-def.xml에 쿼리 추가

 

sql-def.xml에는 모두 두개(MYSQL과 ORACLE)의 데이터베이스 쿼리가 존재합니다

이 구분은 <database> 태그로 구분이 됩니다

만약 mysql이 설치되어 있다면 mysql의 <database> 태그 안에 쿼리들을 수정하거나 추가하셔야 하고,

oracle이 설치되어 있다면 oracle의 <database>태그 안에 있는 쿼리들을 수정하거나 추가할 수 있습니다 

각 <database> 태그 안에 있는 쿼리태그들(select_user, create_user ..)은 데이터베이스 별로 유니크합니다

예를들어 <select_user_01> 태그안에 들어있는 쿼리는 mysql에 딱 한개, oracle에 딱 한개씩 존재한다는 말입니다

DAO에서 이 쿼리태그 키를 기준으로 쿼리하기 때문에 추가하고자 하는 데이터베이스안에 유니크하게 추가하세요

 

sql-def.xml 구조

 

<sqls>

   <description></description>

 

   <!-- mysql에서 실행되는 쿼리 -->

   <database name="mysql">      

 

      <!-- 데이터베이스별로 유니크한 쿼리 태그들 -->

      <!-- <액션(CREATE,DELETE,INDEX,SELECT,UPDATE)_테이블명_순차시퀀스> 로 구성 -->

      <create_user>CREATE TABLE user ( ...)</create_user>

      <index_user_pk>CREATE UNIQUE INDEX ... </index_user_pk>

      <insert_user>INSERT INTO user_t ... </insert_user>

      <update_user_01>UPDATE user_t SET .. </update_user_01>

      <delete_user_01>DELETE FROM user_t ... </delete_user_01>

      <select_user_01>SELECT .. FROM user_t .. </select_user_01>

       ...

    </database>

 

    <!-- 오라클에서 실행되는 쿼리 -->

    </database name="oracle">

 

      <!-- 데이터베이스별로 유니크한 쿼리 태그들 -->

      <create_user>CREATE TABLE user ( ...)</create_user>

      <index_user_pk>CREATE UNIQUE INDEX ... </index_user_pk>

      <insert_user>INSERT INTO user_t ... </insert_user>

      <update_user_01>UPDATE user_t SET .. </update_user_01>

      <delete_user_01>DELETE FROM user_t ... </delete_user_01>

      <select_user_01>SELECT .. FROM user_t .. </select_user_01>

       ...

    </database>

</sqls>

 

② SqlStatement 수정

com.jakartaproject.database.sql.SqlStatement.java 를 수정하여야 합니다

setter로 이루어진 클래스로 추가하고자 하는 쿼리태그에 대한 setter를 만들면 됩니다

기존에 만들어져 있는 setter를 참고하여 생성하세요

 

③ QueryLoader 수정

com.jakartaproject.database.sql.QueryLoader.java 를 수정하여야 합니다

sql-def.xml에서 생성된 새로운 쿼리에 대한 태그를 Digest가 읽어들여야 하기 때문에 이부분도 추가가 필요합니다

digester.addBeanPropertySetter() 함수에 기존에 작성된 문장을 보시고 적절히 추가하시면 됩니다

 

④ 추가예제를 통해 알아봅시다

환경 : MYSQL

추가쿼리 : SELECT userNick FROM user_t WHERE userId = ?

 

-. sql-defs.xml 수정

    user_t 테이블의 select문장은 21까지 있음으로 select_user_22로 쿼리태그를 구성한다

 

<sqls>

   <description></description>

 

   <!-- mysql에서 실행되는 쿼리 -->

   <database name="mysql">      

 

      <!-- 데이터베이스별로 유니크한 쿼리 태그들 -->

      <create_user>CREATE TABLE user ( ...)</create_user>

      <index_user_pk>CREATE UNIQUE INDEX ... </index_user_pk>

      <insert_user>INSERT INTO user_t ... </insert_user>

      <update_user_01>UPDATE user_t SET .. </update_user_01>

      <delete_user_01>DELETE FROM user_t ... </delete_user_01>

      <select_user_01>SELECT .. FROM user_t .. </select_user_01>

       ...

       <select_user_22>SELECT userNick FROM user_t WHERE userId = ?</select_user_22>

    </database>

 

    <!-- 오라클에서 실행되는 쿼리 -->

    </database name="oracle">

 

      <!-- 데이터베이스별로 유니크한 쿼리 태그들 -->

      <create_user>CREATE TABLE user ( ...)</create_user>

      <index_user_pk>CREATE UNIQUE INDEX ... </index_user_pk>

      <insert_user>INSERT INTO user_t ... </insert_user>

      <update_user_01>UPDATE user_t SET .. </update_user_01>

      <delete_user_01>DELETE FROM user_t ... </delete_user_01>

      <select_user_01>SELECT .. FROM user_t .. </select_user_01>

       ...

    </database>

</sqls>

 

-. SqlStatement.java 수정

   select_user_22 태그를 추가하였음으로 다음 setter를 SqlStatement.java에 추가

   가능하면 setSelect_user_21() 함수 밑에 추가하도록 하자

public void setSelect_user_21(String select_user_21) {
  sqlMap.put("select_user_21", select_user_21);
}

public void setSelect_user_22(String select_user_22) {
  sqlMap.put("select_user_22", select_user_22);
}

 

public void setCreate_counter(String create_counter) {
  sqlMap.put("create_counter", create_counter);
}

 

-. QueryLoader.java 수정

    select_user_22에대한 addBeanPropertySetter 추가!

digester.addBeanPropertySetter("sqls/database/select_user_20","select_user_20");
digester.addBeanPropertySetter("sqls/database/select_user_21","select_user_21");

digester.addBeanPropertySetter("sqls/database/select_user_22","select_user_22");
digester.addBeanPropertySetter("sqls/database/create_counter","create_counter");
digester.addBeanPropertySetter("sqls/database/index_counter_pk","index_counter_pk");

 

-. 추가한 쿼리 사용

DAO 에서 다음과 같이 사용 가능합니다

Query query = new Query(resource);
list = (ArrayList)query.execute("select_user_22", new Object[]{userId}, new VOListHandler(UserVO.class));

 

UserVO 클래스에 해당 결과값을 저장해 줍니다

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함