iBATIS - sqlMap.xml(상속관계) , 조인 쿼리
Posted 11 20, 2008 01:29, Filed under: Language/ㅡ iBATIS## Oracle - 테스트 테이블 생성, 데이타 삽입
SQL 파일 내용
CREATE SEQUENCE memo_T_seq
increment by 1
start with 1
nomaxvalue
nocycle
cache 10;
CREATE SEQUENCE comment_T_seq
increment by 1
start with 1
nomaxvalue
nocycle
cache 10;
CREATE TABLE memo_T(
idx NUMBER,
subject VARCHAR2(50),
name VARCHAR2(20),
email VARCHAR2(50),
w_day date,
memo VARCHAR2(4000),
CONSTRAINT memo_T PRIMARY KEY(idx)
);
CREATE TABLE comment_T(
idx NUMBER,
memo_idx NUMBER CONSTRAINT comment_fk REFERENCES memo_T (idx),
name VARCHAR2(20),
email VARCHAR2(50),
w_day date,
comm VARCHAR2(4000)
);
INSERT INTO memo_T VALUES(memo_T_seq.NEXTVAL,'test1','마루치','aaa@hanbiteni.co.kr','2008-11-18','테스트입니다.');
INSERT INTO memo_T VALUES(memo_T_seq.NEXTVAL,'내가 누구게~~?','아라치','bbb@hanbiteni.co.kr','2008-11-19','마루치 못 봤어요?.');
INSERT INTO memo_T VALUES(memo_T_seq.NEXTVAL,'세번째 테스트','파토나슈','papa@hanbiteni.co.kr','2008-11-19','파토나슈~~.');
INSERT INTO comment_T VALUES(comment_T_seq.NEXTVAL,2,'마루치','aaa@hanbiteni.co.kr','2008-11-18','몰라~! 알 수가 없어!!');
INSERT INTO comment_T VALUES(comment_T_seq.NEXTVAL,2,'파토나슈','papa@hanbiteni.co.kr','2008-11-19','파토! 깽판!');
INSERT INTO comment_T VALUES(comment_T_seq.NEXTVAL,1,'파토나슈','papa@hanbiteni.co.kr','2008-11-19','시워~ 시워^^');
Memo.java - POJO 객체
package memo.vo;
import java.util.List;
public class Memo {
private int idx;
private String subject, name, email, w_day, memo;
private List<Comment> comments;
public List<Comment> getComments() {
return comments;
}
public void setComments(List<Comment> comments) {
this.comments = comments;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getIdx() {
return idx;
}
public void setIdx(int idx) {
this.idx = idx;
}
public String getMemo() {
return memo;
}
public void setMemo(String memo) {
this.memo = memo;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getW_day() {
return w_day;
}
public void setW_day(String w_day) {
this.w_day = w_day;
}
}
Comment.java - POJO 객체
package memo.vo;
public class Comment {
private int idx, memo_idx;
private String c_name, c_email, c_w_day, comm;
public String getC_email() {
return c_email;
}
public void setC_email(String c_email) {
this.c_email = c_email;
}
public String getC_name() {
return c_name;
}
public void setC_name(String c_name) {
this.c_name = c_name;
}
public String getC_w_day() {
return c_w_day;
}
public void setC_w_day(String c_w_day) {
this.c_w_day = c_w_day;
}
public String getComm() {
return comm;
}
public void setComm(String comm) {
this.comm = comm;
}
public int getIdx() {
return idx;
}
public void setIdx(int idx) {
this.idx = idx;
}
public int getMemo_idx() {
return memo_idx;
}
public void setMemo_idx(int memo_idx) {
this.memo_idx = memo_idx;
}
}
sqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC '-//ibatis.apache.org//DTD SQL Map Config 2.0//EN' 'http://ibatis.apache.org/dtd/sql-map-config-2.dtd'>
<sqlMapConfig>
<transactionManager type="JDBC" commitRequired="false">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="JDBC.ConnectionURL" value="jdbc:oracle:thin:@203.236.209.201:1521:orcl"/>
<property name="JDBC.Username" value="scott"/>
<property name="JDBC.Password" value="tiger"/>
</dataSource>
</transactionManager>
<sqlMap resource="config/Memo.xml"/>
</sqlMapConfig>
Memo.xml(sqlMap)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC '-//ibatis.apache.org//DTD SQL Map 2.0//EN' 'http://ibatis.apache.org/dtd/sql-map-2.dtd'>
<sqlMap>
<typeAlias alias="memo" type="memo.vo.Memo"/>
<typeAlias alias="comment" type="memo.vo.Comment"/>
<resultMap id="getComm" class="comment">
<result property="idx" column="idx"/>
<result property="memo_idx" column="memo_idx"/>
<result property="c_name" column="name"/>
<result property="c_email" column="email"/>
<result property="c_w_day" column="w_day"/>
<result property="comm" column="comm"/>
</resultMap>
<!--
memo 클래스의 resultMap 를 만든다.
getMemo_comm 을 하지 않고
Comment.java 에는 getMemo에서 다 선언하지 않은 List 타입의 comments 컬럼이 있다.
-->
<resultMap id="getMemo" class="memo">
<result property="idx" column="idx"/>
<result property="subject" column="subject"/>
<result property="name" column="name"/>
<result property="email" column="email"/>
<result property="w_day" column="w_day"/>
<result property="memo" column="memo"/>
</resultMap>
<!--
getMemo_comm의 이름을 가진 resultMap 에서는 위의 getMemo 를 상속받는다.
자바에서와 같이 상속을 받아서 getMemo의 result로 선언한 컬럼을 모두 포함한다.
아래 getMemo_comm에서는 List 타입의 comments를 오버라이딩 하였다.
-->
<resultMap id="getMemo_comm" class="memo" extends="getMemo">
<result property="comments" select="getCommList" column="{memo_idx=idx}"/>
</resultMap>
<!-- Comment -->
<select id="getCommList" resultMap="getComm" parameterClass="comment">
SELECT * FROM comment_T
WHERE memo_idx = #memo_idx#
ORDER BY memo_idx DESC
</select>
<!-- Memo -->
<select id="getMemoList" resultMap="getMemo_comm">
SELECT * FROM memo_T
ORDER BY idx DESC
</select>
</sqlMap>
MemoClient.java
package memo.client;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import java.io.IOException;
import java.io.Reader;
import java.sql.SQLException;
import java.util.List;
import memo.vo.Comment;
import memo.vo.Memo;
public class MemoClient {
public static void main(String[] arr)throws IOException, SQLException{
Reader reader = Resources.getResourceAsReader("sqlMapConfig.xml");
SqlMapClient map = SqlMapClientBuilder.buildSqlMapClient(reader);
reader.close();
List<Memo> list = map.queryForList("getMemoList");
// Memo 타입의 m
for(Memo m : list)
{
// 메인 글의 번호, 제목, 코멘트 개수가 출력되고
System.out.println(m.getIdx()+" - "+m.getSubject()+"("+m.getComments().size()+")");
for(Comment c : m.getComments())
{ // 코멘트의 내용, 글쓴이 이름 이 출력된다.
System.out.println(" -->"+c.getComm()+"("+c.getC_name()+")");
}
}
}
}
"Language / ㅡ iBATIS" 분류의 다른 글
| iBATIS - DAO 개념 사용. 싱글턴 DaoManager (0) | 2008/11/21 |
| iBATIS - Oracle(Emp, Dept) Join 결과값 출력 형식 (0) | 2008/11/19 |
| iBATIS - 이용 POJO빈에서 객체 값 가져오기 (0) | 2008/11/19 |
Trackback URL : http://develop.sunshiny.co.kr/trackback/12