기본 콘텐츠로 건너뛰기

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

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

출처 :

 www.hanajava.net : hanajava@empal.com.



목적 :

 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 클래스 부분 설명이 없어서.. 이것만 보고 할 순 없지만요..

댓글

이 블로그의 인기 게시물

엑셀, 중복값을 처리하는 7가지 방법

참조: http://thekida.tistory.com/13 * 이포스트는 업무중 웹서핑을 하다가 우연히 발견한 내용입니다.    좀더 자세한 내용을 알고 싶거나 저자의 다른 포스트를 보시려면 원본 사이트로 이동해 보세요.    1. 같은 셀 중복 (서식 강조하기) 한개의 셀에서 중복되는 값만 강조하여 체크하는 방법입니다.                  적용하고자 하는 셀을 선택 하신 후, 아래와 같이 셀 강조 규칙만 설정하면 됩니다. 참 쉽죠~^^ 2. 같은 셀 중복 (중복 여부 표시하기) 한개의 셀에서 중복되는 값을 다른 셀에 표시하는 방법입니다. 이와 같이 하기 위해서는 B2에 오른쪽에 쓰인 함수를 사용 하면 됩니다. =IF(COUNTIF(A:A, A2)>1,"O","X") 여기서 잠깐 이 함수를 살표보겠습니다. =IF(COUNTIF(비교할 전체범위, 비교하고싶은 셀) > 1, "1이 넘을 경우 표시하고 싶은 내용', "1이 넘지 않을 경우 표시하고 싶은 내용" 비교할 전체범위에 A:A를 넣었는데 이는 A셀 전체를 선택한 것입니다. 그리고 비교하고자 하는 값에 A2를 넣었습니다. A2셀인 "A-ha"가 A전체셀에 몇개가 있는지를 센 후에 1개가 넘으면(중복) O를 표시, 그렇지 않으면 X를 표시하는 함수입니다. 물론 함수를 일일히 바꿔줄 필요 없이 B2셀을 복사해서 아래로 붙여넣으면, B3셀은 A3를 비교하고, B4는 A4, B5는 A5.... 이런식으로 자동변환됩니다. 따옴표 안의 내용을 원하는 텍스트로 바꿔주면 O, X 대신 자신이 원하는 문구로 표시 할 수 있습니다. 3. 같은 셀 중복 (중복 값 제거하기) 한개의 셀에서 중복되는 값을 제거하는 방법입니다. 왼쪽 그림에서 두개였던 Travis(A3, A...

[TIPS] 노트패드++에서 중복행을 삭제해보자 / Removing duplicate rows in Notepad++

노트패드++에서 중복행을 삭제해보자 / Removing duplicate rows in Notepad++   노트패드++를 사용중에 중복되는 행을 지워야 하는 상황이 생겼다. 그래서 구글링해서 중복행을 지우는 방법을 찾아냈습니다. 원본은 [ 여기 ] 에서 보시면 되겠습니다. [노트패드++를 이용하여 중복행을 제거하는 방법] 1. 우선 플러그인을 설치합니다.     Plugins -> Plugin Manager -> Show Plugin Manager -> Available tab     -> TextFX -> Install 2. 새로시작된 노트패드의 메뉴를 살펴보면 TextFX 가 나타나있는것을 확인할 수 있습니다. 3. 메뉴의 TextFX->TextFX Tools 에서    +sort outputs only unique(at culumn) lines 항목을 체크합니다. 4. 에디터에서 중복제거할 내용을 블럭으로 지정합니다.(CTRL+A) 5. 마지막으로 TextFX->TextFX Tools 에서    sort lines case sensitive 또는 sort lines case insensitive를 클릭하면 끝.

[해보자] 문서 오픈 시 엑셀창이 2개 뜰 때, 새 시트 열릴 때

어느날 엑셀 파일을 열면 엑셀창이 2개 뜨는 현상이 나타나서 구글링을 하여 문제를 해결 하였다. 원 작성자의 글을 보고 따라 해봤습니다. [출처] [Excel/엑셀] 문서 오픈 시 엑셀창이 2개 뜰 때, 새 시트 열릴 때|작성자 oblake https://blog.naver.com/PostView.nhn?blogId=dududtnr&logNo=221398304442 내 컴퓨터에 설치된 엑셀은 2016 버전이므로 이 기준으로 처리한 내용을 요약하자면 다음과 같다. 1. 파일 - 옵션 - 리본 사용자 지정 - 명령 선택 드롭다운메뉴의 '기본 탭' 2. '개발 도구' 선택 - 추가 - 확인 3. 개발도구 - COM 추가 기능을 클릭하면 아래와 같은 창이 뜨는데,    맨 마지막에 'MySQL for Excel'이라는 것이 추가되어 있었다. 4. 'MySQL for Excel' 체크 해제 하고 확인 5. 성공.