sitelink1 | |
---|---|
sitelink2 | |
sitelink3 | |
extra_vars6 |
http://blog.empas.com/ahnyounghoe/13205448
<!-- SELECT Statements -->
<select id="selectDefaultList" resultMap="article">
select ID, LANG, TITLE, LINK, REGI_DATE, DESC, USERINFO_REF
FROM T_ARTICLE_LINK
</select>
8. Spring기반 iBatis DAO 작성
Spring MVC 어플리케이션 개발 <5> MVC 컨트롤러 작성 에서 생성했던 SqlMapArticleLinkDao 클래스가 SqlMapClientDaoSupport 클래스를 상속하도록 합니다. SqlMapClientDaoSupport 클래스는 Spring이 iBatis의 SqlMap을 활용하여 CRUD 작업을 쉽게 할 수 있게 해주는 클래스입니다.
이렇게 되면 dao-context.xml의 설정도 아래와 같이 변경해야 합니다.
그리고 나서 DAO 클래스의 메소드를 작성해보죠.
public class SqlMapArticleLinkDao extends SqlMapClientDaoSupport implements ArticleLinkDao {
public List<ArticleLink> getDefaultList() {
public List<ArticleLink> getDefaultList() {
return getSqlMapClientTemplate().queryForList("selectDefaultList", null);
}
}
getSqlMapClientTemplate() 메소드는 관용 표현으로 이해하면 됩니다. 템플릿 객체를 얻어서 queryForList 메소드를 호출합니다. 다수의 결과가 반환되는 경우 이 메소드가 쓰입니다. 첫번째 인자는 SqlMap 파일에 있는 Sql 문장의 id 이고, 두번째는 sql 문에 인자로 제공할 객체입니다. 현재는 기본 목록이기 때문에 인자는 필요없어 null을 입력하죠.
이제 SqlMap 파일인 ArticleLink.xml을 보겠습니다. 먼저 반복해서 기입해야 하는 클래스 이름을 짧게 쓰기 위해서 typeAlias를 정의했습니다. 그리고, 클래스와 테이블이 1:1로 대응되지 않는 경우 resultMap을 활용해서 해결합니다.
ArticleLink 객체의 프로퍼티 중에 UserInfo 객체가 있는데 DB는 객체 타입을 지원할 수 없습니다. 그래서, UserInfo의 id 속성과 select의 결과 문에서 USERINFO_REF값을 대응시키겠다고 정의한 것이죠.
<sqlMap namespace="ArticleLink">
<typeAlias alias="articleLink" type="article.domain.ArticleLink" />
<resultMap id="article" class="articleLink">
<result property="id" column="ID" />
<result property="language" column="LANG" />
<result property="title" column="TITLE" />
<result property="link" column="LINK" />
<result property="regiDate" column="REGI_DATE" />
<result property="description" column="DESC" />
<result property="registrator.id" column="USERINFO_REF" />
</resultMap>
<result property="id" column="ID" />
<result property="language" column="LANG" />
<result property="title" column="TITLE" />
<result property="link" column="LINK" />
<result property="regiDate" column="REGI_DATE" />
<result property="description" column="DESC" />
<result property="registrator.id" column="USERINFO_REF" />
</resultMap>
<!-- SELECT Statements -->
<select id="selectDefaultList" resultMap="article">
select ID, LANG, TITLE, LINK, REGI_DATE, DESC, USERINFO_REF
FROM T_ARTICLE_LINK
</select>
</sqlMap>
이제 화면 코딩을 제외하고는 간단한 목록보기가 구현된 것입니다.