'데이타베이스'에 해당되는 글 1건

  1. 2009.12.13 Spring에서 iBatis 연동하기 7

Database 연동

-       스프링은 JDBC를 비롯하여 ORM 프레임워크를 직접적으로 지원하고 있기 때문에 간단하게 JDBC뿐만 아니라 ORM 프레임워크를 스프링과 연동할 수 있다.

-       스프링은 JDBC, ORM 프레임워크 등의 다양한 기술을 이용해서 손쉽게 DAO클래스를 구현할 수 있도록 지원한다.

-       템플릿 클래스 지원

n  개발자가 중복된 코드를 입력해야 하는 성가신 작업을 줄일수 있도록 한다.

n  JDBC : JdbcTemplate

n  iBatis : SqlMapClientTemplate

n  Hibernate : HibernateTemplate

-       DaoSupport 클래스 지원

n  DAO에서 기본적으로 필요로 하는 기능을 제공한다.

n  JDBC : JdbcDaoSupport

n  iBatis : SqlMapClientDaoSupport

n  Hibernate : HibernateDaoSupport

n  이러한 DaoSupport 클래스를 상속받아 DAO클래스를 구현한 뒤, DaoSupport 클래스가 제공하는 기능을 사용하여 보다 편리하게 코드를 작성할 수 있게 된다.

-       의미 있는 예외 클래스 제공한다.

-       스프링은 데이터베이스 처리 과정에서 발생한 예외가 발생했는지를 구체적으로 확인 있도록 하기위해, 데이터베이스 처리와 관련된 예외 클래스를 제공하고 있다.

n  데이터베이스 처리 과정에서 SQLException 발생하면 스프링이 제공하는 예외 클래스 알맞은 예외 클래스로 변환해서 예외를 발생 시킨다.

n  스프링의 모든 예외 클래스들은 DataAccessException 상속 받는다.

n  BadSqlGrammerException, DataRetrievalFailureException

 

 

 

DataSource 설정

-       스프링은 DataSource를 통해서 Connection을 제공한다.

-       따라서, DataSource 정보를 설정해야 한다.

-       스프링은 다음과 같은 3가지 설정 방식을 제공한다.

1.     커넥션 풀을 이용한 DataSource 설정

2.     JNDI를 이용한 DataSource 설정

3.     DriverManager를 이용한 DataSource 설정

 

스프링의 iBatis지원

-       스프링은 SqlMapClient를 스프링 설정 파일에서 쉽게 설정하도록 돕는 SqlMapclientFactoryBean클래스를 제공한다.

-       이 클래스를 사용하면 SqlMapClient를 스프링의 빈으로 설정할 수 있다.

 

DataSource설정

applicationContext.xml

<beans xmlns="http://www.springframework.org/schema/beans"

        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

        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">

 

        <bean id="dataSource"

               class="org.apache.commons.dbcp.BasicDataSource"

               p:driverClassName="com.mysql.jdbc.Driver"

               p:url="jdbc:mysql://127.0.0.1:3306/struts"

               p:username="scott"

               p:password="tiger" />

       

</beans>

 

 

SqlMapConfig.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>

        <sqlMap resource="movie/Director.xml"/>

</sqlMapConfig>

 

 

SqlMapClientTemplate 클래스이용

-       SqlMapClient를 사용할 때에 관련된 반복적인 코드를 제거 할 수 있도록 해준다.

-       SqlMapClientTemplate클래스를 제공한다.

-       SqlMapClientTemplate클래스는 내부적으로 iBatisSqlMapClient를 사용한다.

-       SqlMapClientTemplate클래스를 빈으로 설정하고 이미 설정한 SqlMapClient빈을 설정한다.

 

SqlMapConfig.xml

<bean id="sqlMapClient"

        class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"

        p:dataSource- ref="dataSource"

        p:configLocation="SqlMapConfig.xml />

 

<bean id="sqlMapClientTemplate"

        class="org.springframework.orm.ibatis.SqlMapClientTemplate"

        p:sqlMapClient- ref="sqlMapClient />

 

<bean id="directorDao"

        class="myspring.ibatis.DirectorDAOImpl1"

        p:sqlMapClientTemplate- ref="sqlMapClientTemplate />

DAO 작성시 SqlMapClientTemplate 클래스를 주입 받을 수 있도록 프로퍼티와 setter메소드를 작성한다.

SqlMapClientTemplate 클래스가 제공하는 메소드를 이용해서 DAO를 작성한다.

DAO 클래스를 빈으로 설정하고 미리 설정한 SqlMapClientTemplate 빈을 전달 받도록 설정한다.

 

DirectorDAOImpl1.java

public class DirectorDAOImpl1 implements DirectorDAO {

       

        private SqlMapClientTemplate sqlMapClientTemplate;

       

        public void setSqlMapClientTemplate(SqlMapClientTemplate qlMapClientTemplate){

               this.sqlMapClientTemplate = sqlMapClientTemplate;

        }

        public List<Director> selectAllDirector() {

                sqlMapClientTemplate.queryForList("selectAllDirector");

        }

}

 

 

SqlMapClientDaoSupport 클래스이용

-       SqlMapClientTemplate 클래스를 DAO 클래스에서 좀 더 쉽게 사용할 수 있도록 SqlMapClientDaoSupport 클래스를 제공한다.

-       SqlMapClientDaoSupport 클래스가 제공하는 getSqlMapClientTemplate() 메소드를 이용해서 SqlMapClientTemplate 객체를 얻어내어 DAO를 작성한다.

-       따라서, SqlMapClientTemplate객체를 주입받을 생성자나 setter메소드가 필요 없다.

-       DAO 클래스를 빈으로 설정하고 미리 설정한 SqlMapClient빈을 전달 받도록 설정한다.

 

DirectorDAOImpl2.java

public class DirectorDAOImpl2 extends SqlMapClientDaoSupport implements DirectorDAO {

       

        public List<Director> selectAllDirector() {

               return getSqlMapClientTemplate().queryForList("selectAllDirector");

        }

              

}

 

applicationContext.xml

<bean id="sqlMapClient"

        class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"

        p:dataSource- ref="dataSource"

        p:configLocation="SqlMapConfig.xml />

 

<bean id="directorDao2"

        class="myspring.ibatis.DirectorDAOImpl2"

        p:sqlMapClient- ref="sqlMapClient />

Posted by 피곤키오
,