From JCFWiKi
[편집] 코드 테이블 생성
- 코드의 아이디와 값 그리고 분류 카테고리를 가지는 간단한 코드 테이블을 생성한다.
- HSQLDB 기준으로 생성함(오라클의 경우 int --> NUMBER로, VARCHAR는 VARCHAR2로 변경해 준다.)
CREATE TABLE CODE(
id int,
name varchar(20),
description varchar(50),
category varchar(20),
CONSTRAINT code_pk PRIMARY KEY(id)
)
INSERT INTO CODE(id, name, description, category) VALUES(1, 'SEOUL', '서울','user_address_code');
INSERT INTO CODE(id, name, description, category) VALUES(2, 'INCHEN', '인천','user_address_code');
INSERT INTO CODE(id, name, description, category) VALUES(3, 'PUSAN', '부산','user_address_code');
INSERT INTO CODE(id, name, description, category) VALUES(4, 'ULSAN', '울산','user_address_code');
[편집] MODEL 작성
public class Code {
private int id;
private String category;
private String name;
private String description;
public int getId() {return id;}
public void setId(int id) {this.id = id;}
public String getCategory() {return category;}
public void setCategory(String category) {this.category = category;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public String getDescription() {return description;}
public void setDescription(String description) {this.description = description;}
}
[편집] SQL 작성
- getCodes 문장만 작성한다.
- resultMap은 선택적으로 사용한다.
<sqlMap namespace="code">
<typeAlias alias="code" type="edu.code.model.Code"/>
<resultMap id="code-resultMap" class="code" >
<result property="id" column="id"/>
<result property="category" column="category"/>
<result property="name" column="name"/>
<result property="description" column="description"/>
</resultMap>
<statement id="getCodes" parameterClass="string" resultMap="code-resultMap">
SELECT id, category, name, description
FROM CODE
WHERE category = #category#
</statement>
</sqlMap>
- SQL CONFIG XML(sqlmap-config.xml) 파일에 정의를 추가한다.
<sqlMapConfig>
<settings cacheModelsEnabled="true" />
<sqlMap resource="sample/user/dao/sqlmap/User.xml" />
<sqlMap resource="edu/code/dao/sqlmap/Code.xml" />
</sqlMapConfig>
[편집] DAO 작성
- 카테고리를 파라미터로 받는 조회 메소드를 작성한다.
- jcf.dao.ibatis.BaseSqlMapClientDAO를 상속 받도록 한다.
public class CodeDao extends BaseSqlMapClientDAO {
public List getCodes(String category) {
List codeList = executeQueryForList("getCodes", category);
return codeList;
}
}
- 작성된 CodeDao 클래스를 Spring 빈으로 정의한다(applicationContext-code.xml)
- CodeDao 클래스 정의에서는 상속 받은 BaseSqlMapClientDAO에서 필요로 하는 sqlMapClient를 프라퍼티로 가지도록 정의한다.
<beans ..>
<bean id="codeDao" class="edu.code.dao.CodeDao">
<property name="sqlMapClient" ref="sqlMapClient" />
</bean>
</beans>
[편집] SERVICE 작성
- 카테고리를 파라미터로 받는 서비스 조회 메소드를 작성한다.
- CodeDao를 프라퍼티로 선언하고 setter 메소드를 작성한다.
public class CodeService {
private CodeDao codeDao;
public List getCodes(String category) {
return codeDao.getCodes(category);
}
/* getter & setter */
public void setCodeDao(CodeDao codeDao) {this.codeDao = codeDao;}
}
- 작성된 코드DAO 클래스를 Spring 빈으로 정의한다(applicationContext-code.xml)
- 로직상에서 호출하는 CodeDao를 DI 프라퍼티로 정의한다.
<beans ..>
<bean id="codeService" class="edu.code.service.CodeService">
<property name="codeDao" ref="codeDao" />
</bean>
<bean id="codeDao" class="edu.code.dao.CodeDao">
<property name="sqlMapClient" ref="sqlMapClient" />
</bean>
</beans>