스트럿츠2 아이바티스 데이터베이스 연결 소스


안녕하세요.
고코더 입니다.


오늘은 ibatis를 이용해 오라클 데이터베이스를 연결하는 방법을 알아보겠습니다.
ibatis를 이용한 이유는 스트럿츠2에서 가장 많이 사용하는 프레임워크 입니다. 
실무에서도 이 두 조합은 쉽게 볼 수 있습니다. 
그래서 최대한 쉽게 ibatis를 스트럿츠2를 이용해 데이터베이스를 연결해서 select 쿼리를 날려보겠습니다.

학습전에 제가 남겨둔 이전 스트럿츠 강의를 보고 오시길 바랍니다. 해당 소스를 활용할 예정입니다.

그리고 오라클 데이터베이스도 설치하시면 좋을거 같습니다
-> 

Oracle - 오라클 오류 "ora-28000 the account is locked" / 계정이 잠겨 있습니다.

오라클 - scott 계정은 첫 로그인 후 비번을 바꿔야 합니다. / the password has expired




 1. SqlMapConfig.xml 생성


src 폴더 아래 SqlMapConfig.xml 를 생성해주세요. 데이터베이스 연결을 위한 config 파일 입니다.

내용은 아래처럼 채워주세요.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig      
    PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"      
    "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
  <transactionManager type="JDBC" commitRequired="false">
    <dataSource type="SIMPLE">
      <property name="JDBC.Driver" value="oracle.jdbc.OracleDriver"/>
      <property name="JDBC.ConnectionURL"  value="jdbc:oracle:thin:@localhost:1521:orcl"/>
      <property name="JDBC.Username" value="scott"/>
      <property name="JDBC.Password" value="tiger"/>
    </dataSource>
  </transactionManager>
       
       <sqlMap resource="map/db_test.xml" />
</sqlMapConfig>
cs

 2. SqlMapLocator.java 생성


util 패키지를 생성하여 SqlMapLocator.java 파일을 만듭니다. ibatis를 사용하기 위한 기본 파일입니다.

내용은 아래처럼 채웁니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package util;
import java.io.IOException;
import java.io.Reader;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
public class SqlMapLocator {
       public static SqlMapClient getMapper()
       {
             SqlMapClient sqlMapper;
             
           try
           {
              Reader reader = Resources.getResourceAsReader(
                      "SqlMapConfig.xml");
              sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);
              
              reader.close();
           }
           catch (IOException e)
           {
              // Fail fast.
              throw new RuntimeException(
                      "Something bad happened while building the SqlMapClient  instance." +
                      e, e);
           }
           return sqlMapper;
       }
}
cs

해당 예제는 ibatis를 사용할때 거의 공통으로 쓰는 방식입니다. 우선 작성해보세요.



 3. db_test.xml


이번엔 이전에 생성한 map 패키지 안에 db_test.xml을 만듭니다. 
이 파일은 게시판을 만들때 사용하기 위해 test 라는 이름으로 만들었습니다.
해당 xml은 모든 쿼리를 작성하여 사용합니다. 

내용은 아래처럼 채웁니다.
1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap>
       <select id="conTest" resultClass="String">
       select 'Database Connection Test' as conTest from DUAL
       </select>
</sqlMap>
cs
5번째 라인 : 해당 쿼리에 id를 지정합니다. 반환 클래스는 스트링 문자로 반환합니다.
6번째 라인 : select 문을 작성하였습니다. 오라클 기본 테이블을 이용하여 데이터베이스 연결 테스트 입니다.


 4. TestDao.java 생성 


이제는 쿼리를 끌어와 실행시킬 DAO(Data Access Object) 파일을 생성합니다. 이 파일은 DB를 사용해 데이터를 조화하거나 조작하는 기능을 전담하는 오브젝트입니다.

내용은 이렇게 작성합니다. 데이터 베이셔 연결을 위한 쿼리만 하나만 가져옵니다.
1
2
3
4
5
6
7
8
9
10
package test;
import java.sql.SQLException;
import util.SqlMapLocator;
public class TestDao {
       public String conTest() throws SQLException
       {      
             //데이터베이스 연결 테스트
             return   (String)SqlMapLocator.getMapper().queryForObject("conTest");
       }
}
cs

8번째 라인 : ibatis에 queryForObject 를 사용해 연결되어 있는 XML에 conTest 쿼리를 가져옵니다.


 5. TestAction.java 수정


해당 Action 파일을 수정 합니다. 이전에 함께 따라 하신분은 코드를 추가하면 됩니다.

내용은 이렇게 기록 합니다. 기존 액션 클래스에 내용을 추가했습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package test;
import java.sql.SQLException;
import com.opensymphony.xwork2.ActionSupport;
public class TestAction extends ActionSupport {
     String Title;
     String Content;
     public String getTitle() {
           return Title;
     }
     public void setTitle(String Title) {
           this.Title = Title;
     }
     
     public String getContent() {
           return Content;
     }
     public void setContent(String Content) {
           this.Content = Content;
     }
     
     public String getView() {
           //this.Title = "제목";
           //this.Content = "내용";
           return SUCCESS;
     }
     
     /*데이터베이스 연결 테스트를 위한*/
     
     TestDao dao = new TestDao();
     String ConYN;    
     public String getConYN() {
        return ConYN;    
     }
  
     public String conTest() throws SQLException {
         this.ConYN = dao.conTest();
         return SUCCESS;
     }
}
cs
9번 라인 : 위에서 생성한 dao를 생성합니다.
15번 라인 : 위에서 작성한 conTest() 메소드를 가져옵니다.



 6. struts2_test.xml 추가


이제는 URI에서 맵핑이 되도록 struts2_test.xml를 수정해보겠습니다. 

아래에 내용을 추가합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
     <package name="struts2_test" namespace="/test"  extends="struts-default">
           <action name="hello" class="hello.HelloAction">
                <result name="success" >/WEB-INF/hello.jsp</result>
           </action>
           <action name="view" class="test.TestAction" method="getView">
                <result name="success" >/WEB-INF/test/view.jsp</result>
           </action>
             <!-- 데이터 베이스 연결 테스트 -->       
           <action name="conTest" class="test.TestAction"  method="conTest">
                <result name="success"  >/WEB-INF/test/conTest.jsp</result>
           </action>            
     </package>
</struts>
cs



 7. WEB-INF/test/conTest.jsp 파일 생성


뷰를 작성하기 위해 test 폴더 아래 해당 파일을 생성합니다. 

아래에 내용을 기입합니다. 
1
2
3
4
5
6
7
8
9
10
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
</head>
       <body>
       접속 : ${ConYN}
       </body>
</html>
cs

${ConYN}을 이용해 데이터베이스 액세스를 체크 합니다.


 8. 결과 화면 


해당 URL에 접속하면 데이터베이스가 연결된걸 확인 가능합니다.


마무리



최대한 쉽게 가르켜드리려고 합니다.!

댓글을 달아 주세요