[FRAMEWORK] Spring프레임워크 1.2.9 + iBatis 2.3 연동 정리

목적 :

Spring 프레임워크와 iBatis를 연동한다.



준비물 :

1. JDK : JDK 1.5 이상 설치되어있어야 함

2. 웹서버 : 아파치 톰캣 5.5.23

3. 라이브러리 : Spring프레임워크 1.2.9 (다운로드 : http://www.springframework.org/download)

4. 라이브러리 : iBatis 2.3 (다운로드 : http://ibatis.apache.org/javadownloads.cgi)

5. 개발툴 : WTP (이클립스 플러그인) (다운로드 : http://www.eclipse.org/downloads/) By Project에서 이클립스랑 통합된 All-in-one 버전을 추천

6. 지식 수준 : Java, 서블릿 사용가능, J2EE환경에 대한 기초지식







시작하기 전에 :

1. JDK 1.5 이상이 설치 되어있어야 한다.

2. tomcat 5.5.23 이 설치 되어있어야 한다.

3. 개발툴이 설치되어 있어야 한다.



시작 :

모두 다운로드 받았으면



[1. 프로젝트 생성 및 lib 넣어주기]

이클립스(WTP)에서 다이나믹 웹 프로젝트를 만들고

spring jar와 ibatis 관련 jar등을 lib 폴더에 넣어준다.

그 외에 common 관련 lib 들도 넣어주고..

jdbc용 라이브러리들도 넣어줘야 한다.

(이 부분이 좀.. 불친절해서 시간이 더 소요될지도 모르겠다..)





[2. web.xml 설정]

그리고 WEB-INF 폴더 밑에 있는 web.xml 을 수정한다.



[web-app]

[display-name]licenceweb[/display-name]

노드 아래에



[context-param]
[param-name]contextConfigLocation[/param-name]
[param-value]/WEB-INF/dataAccessContext.xml /WEB-INF/applicationContext.xml[/param-value]
[/context-param]

[listener]
[listener-class]org.springframework.web.context.ContextLoaderListener[/listener-class]
[/listener]

어플리케이션 설정과

DB설정을 위해 이 부분을 추가하고



[servlet]
[servlet-name]licenceweb[/servlet-name]
[servlet-class]org.springframework.web.servlet.DispatcherServlet[/servlet-class]
[/servlet]

[servlet-mapping]
[servlet-name]licenceweb[/servlet-name]
[url-pattern]*.do[/url-pattern]
[/servlet-mapping]

스프링 연동을 위해 서블릿 설정을 한다.



보너스로 톰캣 인코딩 설정을 위해(post, get 파라미터용, 한글이 안 깨지도록)

[!-- 인코딩 필더 설치 --]
[filter]
[filter-name]encodingFilter[/filter-name]
[filter-class]
org.springframework.web.filter.CharacterEncodingFilter
[/filter-class]
[init-param]
[param-name]encoding[/param-name]
[param-value]utf-8[/param-value]
[/init-param]
[/filter]

[filter-mapping]
[filter-name]encodingFilter[/filter-name]
[url-pattern]/*[/url-pattern]
[/filter-mapping]

을 추가한다.





[3. licenceweb-servlet.xml 설정] (* licenceweb은 디스플레이 이름과 동일하게..다른 걸로 바꾸었다면 그 이름으로 한다.)

spring을 위한 xml 설정파일이다.

기본적으로 루트는 [beans]로 시작하고

그 하위 노드를 추가한다.



[!-- ========================= VIEW DEFINITIONS ========================= --]

[bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"]
[property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/]
[property name="prefix" value="/WEB-INF/jsp/"/]
[property name="suffix" value=".jsp"/]
[/bean]



VIEW를 위해서 정의하고.

(이 부분의 역할은 서버의 view에서 넘겨줄 페이지를 위해 prefix랑 suffix를 설정하는 부분..

추후에 자세히 설명하겠다..)





[!-- ========================= DEFINITIONS OF PUBLIC CONTROLLERS ========================= --]

[bean id="defaultHandlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/]

[bean name="/login.do" class="com.comtrue.pc.licenceweb.web.LoginController"]
[property name="licenceWeb" ref="licenceWeb"/]
[/bean]

[bean name="/logout.do" class="com.comtrue.pc.licenceweb.web.LogoutController"]
[/bean]

...



컨트롤러를 위해 이 부분을 정의한다.

(설정에 있어서는 클래스의 public, protected 처럼 지정할 수 있지만

여기서는 일단 public 만 넣어둔다.)





[4. applicationContext.xml 설정]

어플리케이션 컨텍스트를 설정하는 부분이다

db 설정 파일을 스프링에서 쓸 수 있게하고

트랜잭션 등을 설정한다.

밸리데이션 등을 지정할 수도 있다.





[beans]

[!-- ========================= GENERAL DEFINITIONS ========================= --]

[!-- Configurer that replaces ${...} placeholders with values from properties files --]
[!-- (in this case, mail and JDBC related properties) --]
[bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"]
[property name="location"]
[value]WEB-INF/db_mssql.properties[/value]
[/property]
[/bean]



스프링의 PropertyPlaceholderConfigurer를 위해

jdbc파일의 경로를 지정하여 쓸 수 있게 하고





[bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true"]
[property name="transactionManager" ref="transactionManager"/]
[property name="transactionAttributes"]
[props]
[prop key="insert*"]PROPAGATION_REQUIRED[/prop]
[prop key="update*"]PROPAGATION_REQUIRED[/prop]
[prop key="*"]PROPAGATION_REQUIRED,readOnly[/prop]
[/props]
[/property]
[/bean]

트랜잭션 매니저를 지정한다.





[bean id="licenceWeb" parent="baseTransactionProxy"]
[property name="target"]
[bean class="com.comtrue.pc.licenceweb.domain.logic.LicenceWebImpl"]
[property name="accountDao" ref="accountDao"/]
[property name="licenceDao" ref="licenceDao"/]
[/bean]
[/property]
[/bean]

스프링프레임워크의 서비스 부분을 위한 DAO를 설정하여 트랜잭션 관리를 지정한다.





[5. db_mssql.properties 설정]

####################################
# MSSQL 2000
####################################
jdbc.driverClassName=com.microsoft.jdbc.sqlserver.SQLServerDriver
jdbc.url=jdbc:microsoft:sqlserver://localhost:1433;SelectMethod=cursor;DatabaseName=데이터베이스이름;
jdbc.username=아이디
jdbc.password=비밀번호





[6. dataAccessContext.xml 설정]

[beans]

[!-- ========================= RESOURCE DEFINITIONS ========================= --]

[!-- Local Apache Commons DBCP DataSource that refers to a combined database --]
[!-- (see dataAccessContext-jta.xml for an alternative) --]
[!-- The placeholders are resolved from jdbc.properties through --]
[!-- the PropertyPlaceholderConfigurer in applicationContext.xml --]
[bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"]
[property name="driverClassName"][value]${jdbc.driverClassName}[/value][/property]
[property name="url"][value]${jdbc.url}[/value][/property]
[property name="username"][value]${jdbc.username}[/value][/property]
[property name="password"][value]${jdbc.password}[/value][/property]
[/bean]



dataSource에 jdbc 설정을 알린다. 이 부분은 5번의 프로퍼티 파일에서 읽어왔기 때문에

${} 식으로 받아서 서버에서 처리하게 된다.






[!-- Transaction manager for a single JDBC DataSource --]
[bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"]
[property name="dataSource" ref="dataSource" /]
[/bean]


이 부분은.. 트랜잭션 매니저 bean을 설정하는 부분..





[!-- SqlMap setup for iBATIS Database Layer --]
[bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"]
[property name="configLocation" value="WEB-INF/sqlmap-config.xml"/]
[property name="dataSource" ref="dataSource"/]
[/bean]



이 부분은 iBatis 연동을 위해 sql map 설정파일의 경로를 지정하고

dataSoruce를 지정한다.





[!-- ========================= DAO DEFINITIONS: IBATIS IMPLEMENTATIONS ========================= --]

[bean id="accountDao" class="com.comtrue.pc.licenceweb.dao.ibatis.SqlMapAccountDao"]
[property name="sqlMapClient" ref="sqlMapClient"/]
[/bean]




이 부분은 Dao를 구현한 클래스를 정의한다.





[7. sqlmap-config.xml 설정]

iBatis 연동을 위해 sqlmap 설정한다.



[sqlMapConfig]

[sqlMap resource="com/comtrue/pc/licenceweb/dao/ibatis/maps/Account.xml" /]
[sqlMap resource="com/comtrue/pc/licenceweb/dao/ibatis/maps/Licence.xml" /]

[/sqlMapConfig]



Dao 클래스들이 사용하는 쿼리를 담은 xml 경로를 지정한다.





[8. Account.xml 설정, 객체마다 해야함]

Dao 클래스에서 사용하는 쿼리를 입력해두는 파일



[sqlMap namespace="Account"]

[resultMap id="result" class="com.comtrue.pc.licenceweb.domain.Account"]
[result property="userid" column="userid" columnIndex="1"/]
[result property="name" column="name" columnIndex="2"/]
[result property="email" column="email" columnIndex="3"/]
[/resultMap]

[select id="getAccountByUseridAndPassword" resultMap="result"]
select userid, name, email
from ACCOUNT
where userid = #userid# and password = #password#
[/select]

[/sqlMap]



resultMap 은 결과 형태를 지정하는 노드고



select 노드는 select 할 때를 위한 쿼리를 담는 곳이다.

이때 resultMap 속성에 resultMap 의 id를 지정한다. 그러면.. 결과 시에

resultMap 형식으로 결과를 갖고 온다.





[9. SqlMapAccountDao.java 구현 예]



public class SqlMapAccountDao extends SqlMapClientDaoSupport implements AccountDao {

public Account getAccount(String userid, String password) throws DataAccessException
{
Account account = new Account();
account.setUserid(userid);
account.setPassword(password);

return (Account) getSqlMapClientTemplate().queryForObject("getAccountByUseridAndPassword", account);
}

}



getSqlMapClientTemplate()의 queryForObject()를 사용해서

seletc 쿼리를 수행한다. 결과는 resultMap 형식의 클래스로 돌려받게 된다.



Dao를 구현한 클래스들은 서비스 형식의 클래스에서 사용하는 방식으로 개발을 한다.

Dao를 직접 View부분에서 지정하진 않고..





p.s. 2주전쯤 프레임워크 적용을 했었는데..

혹 도움이 될까해서 올려봅니다..



Java 클래스 부분 설명이 없어서.. 이것만 보고 할 순 없지만요..

[FORM name="tagForm" method="post" stype="margin:0 0 0 0"]
spring, ibatis[INPUT id="tagnames" type="hidden" size="95" name="tagnames"]

댓글

이 블로그의 인기 게시물

[LINUX] CentOS 부팅시 오류 : UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY

[MSSQL] 데이터베이스가 사용 중이어서 배타적으로 액서스할 수 없습니다

구글코랩) 안전Dream 실종아동 등 검색 오픈API 소스를 공유합니다. (구글드라이브연동, 이미지 수집 소스)