[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"]
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"]
댓글