http://shonm.tistory.com/entry/SPRING-25-web-mvc-기본-설정
에 이어서 여기에 ibatis 를 이용해서 database 를 연결 하는 설정을 해 보도록 하겠다.
일단 ibatis-xxx.jar 를 추가 시키는 것이 필요하다.
그리고 database 연결을 위해 db connection 을 위한 driver 라이브러리를 추가 해야 한다.
(database 연결 방식은 여러가지가 있는데 나는 실무에서 자주 쓰이느 was 에 jndi 로
설정해 놓는 방식을 이용해 보겠다.)
나는 mysql 을 사용 하였으므로 mysql-connector-java-5.1.6.jar 을 추가 하였다.
이제 database 를 연결 시켜 보겠다.
우선 저번 장에서 eclipse + tomcat 으로 돌려 보았을 것이므로 tomcat 이 설치 되어
있을 것이다. 나는 tomcat 7 대 버전으로 돌리고 있는데 이 정도 버전이면
$TOMCAT_HOME/lib 에 mysql-connector-java-5.1.6.jar 같은 database 에 맞는 driver
를 위치 시켜야 한다. 이클립스와 연결 되어 있는 tomcat 에 파일을 복사하도록 하자
(tomcat 5.5 이전의 버전은 $TOMCAT_HOME/common/lib 라는 경로에 위치해야 한다.)
저번 장에서 eclipse + tomcat 으로 돌려 보았을 것으므로 project explorer 나 navigator에
Servers 라는 녀석이 있을 것이다.
여기에 server.xml 이라는 녀석이 있는데 이 녀석이 was 의 설정을 담당하는 파일이다.
여기에 jndi 로 설정하기 위해선
<Host>
<Context docBase="SpringWebSample" path="/SpringWebSample" reloadable="true" source="org.eclipse.jst.jee.server:SpringWebSample">
~~~~~~~~
</Context>
</Host>
~~~~ 라는 부분에 아래와 같이 설정을 해주는 것이 필요하다.
<Resource name="jdbc/mysql"
auth="Container"
type="javax.sql.DataSource"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
driverClassName="com.mysql.jdbc.Driver"
defaultAutoCommit="false"
url="jdbc:mysql://db_ip:db_port/db_name"
username="user_name"
password="user_password"
maxActive="20"
maxIdle="10"
maxWait="-1"/>
이 뿐만 아니라 web.xml 에 아래와 같은 부분을 추가 해야 한다.
<!-- jndi setting -->
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/mysql</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
(중요한 점은 server.xml 의 Resource name= 부분과 web.xml 의 res-ref-name 태그 내용을
맞추어 줘야 한다는 것이고 server.xml 의 경우 위치를 맞춰주는 것이 중요하다.)
이제 ibatis 설정인 sqlMapConfig 을 해보자
sqlMapConfig-Mysql.xml 파일을 만들고 아래와 같이 작성한다.
<?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="JNDI">
<property name="DataSource" value="java:/comp/env/jdbc/mysql" />
</dataSource>
</transactionManager>
<sqlMap resource="/conf/ibatis/sql/board.xml"/>
</sqlMapConfig>
/conf/ibatis/sql/board.xml 파일을 아래와 같이 작성하여 쿼리를 작성해 본다.
(나는 연결 된 데이터베이스에 user,contents 컬럼이 있는 test_tbl 이라는 table이 있다.)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="board">
<select id="getBoardList" resultClass="com.test.vo.BoardVO">
select user,contents from test_tbl limit 10
</select>
</sqlMap>
이제 이 설정들을 사용하기 위해 datasource 나 sqlMapClient bean을 만들어 보자
applicationContext.xml 에 아래와 같이 database 관련 설정을 해 본다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- Mysql setting sample -->
<bean id="dataSource-Mysql" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="jdbc/mysql"/>
<property name="resourceRef" value="true" />
</bean>
<bean id="sqlMapClient-Mysql" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="classpath:/conf/ibatis/sqlMapConfig-Mysql.xml" />
<property name="dataSource" ref="dataSource-Mysql" />
</bean>
<bean id="trManager-Mysql" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource-Mysql" />
</bean>
</beans>
이게 끝났다면 query 를 가져올 수 있는 dao (data access object) 를 만들어 줘야 한다.
interface 를 이용해서 객체지향설계원칙 SOLID 에 맞게 구현해 보도록 하자 (OCP 에 맞게...)
BasicDAO.java
package com.test.dao;
import java.sql.SQLException;
import java.util.List;
import com.test.vo.BoardVO;
public interface BasicDAO {
public List getBoardList() throws SQLException;
}
BasicDAOImple.java
package com.test.dao;
import java.sql.SQLException;
import java.util.List;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import com.test.vo.BoardVO;
import com.ibatis.sqlmap.client.SqlMapClient;
public class BasicDAOImple extends SqlMapClientDaoSupport implements BasicDAO {
@Override
public List getBoardList() throws SQLException{
// TODO Auto-generated method stub
return (List)getSqlMapClientTemplate().queryForList("getBoardList");
}
}
dao 를 만들어 주었다면 가져다 쓰는 비즈니스 로직도 만들어 줘야 한다.
BasicService.java
package com.test.biz;
import java.util.List;
public interface BasicService {
public String getPageName();
public List getBoardList();
}
비즈니스 로직을 view(jsp) 에 전달 하는 controller 도 필요 하다.
BasicController.java
package com.test.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import com.test.biz.BasicService;
public class BasicController implements Controller{
private BasicService basicService;
public void setBasicService(BasicService basicService) {
this.basicService = basicService;
}
@Override
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
// TODO Auto-generated method stub
ModelAndView mav = new ModelAndView();
//mav.addObject("pageName",basicService.getPageName());
//mav.setViewName("/sample/basicSample");
mav.addObject("boardList",basicService.getBoardList());
mav.setViewName("/sample/boardList");
return mav;
}
}
<%@ page language="java" contentType="text/html; charset=US-ASCII"
pageEncoding="US-ASCII"%>
<%@ page import="java.util.*,com.test.vo.*" %>
<%
List list = (List)request.getAttribute("boardList");
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>board list</title>
</head>
<body>
<table border="1">
<tr>
<td>user</td>
<td>contents</td>
</tr>
<%
for(int i=0;i<list.size();i++){
BoardVO boardVO = (BoardVO)list.get(i);
%>
<tr>
<td><%=boardVO.getUser() %></td>
<td><%=boardVO.getContents() %></td>
</tr>
<%} %>
</table>
</body>
</html>
dispatcher-servlet.xml 에 dao 나 service bean 설정이 필요하다.
dispatcher-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:lang="http://www.springframework.org/schema/lang"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd">
<!-- annotation setting -->
<context:component-scan base-package="com.test"/>
<context:annotation-config/>
<bean id="annotationMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="alwaysUseFullPath" value="true"/>
<property name="order" value="1"/>
</bean>
<!-- basic xml setting -->
<bean id="basicController" class="com.test.controller.BasicController">
<property name="basicService" ref="basicService"/>
</bean>
<bean id="basicService" class="com.test.biz.BasicServiceImpl">
<property name="basicDAO" ref="basicDAO"></property>
</bean>
<bean id="basicDAO" class="com.test.dao.BasicDAOImple">
<property name="sqlMapClient" ref="sqlMapClient-Mysql" />
</bean>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="urlMap">
<props>
<prop key="/basic/basic.do">basicController</prop>
</props>
</property>
</bean>
</beans>
위와 같이 설정 하면 아래와 같이 list 화면을 얻으면서 ibatis 설정이 정상적으로
되었음을 확인 할 수 있다.
(http://localhost:8080/SpringWebSample/basic/basic.do)
자세한 내용을 보고 싶다면 아래 첨부 파일을 확인 하면 된다.
아래 소스에는 annotation을 사용한 내용도 있다.
'SPRING > web mvc 설정' 카테고리의 다른 글
[ SPRING ] 2.5 web mvc 기본 설정 (1) | 2013.08.04 |
---|
댓글