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클래스는 내부적으로 iBatis의 SqlMapClient를 사용한다.
- 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“ /> |
'개발자 센터 > Spring' 카테고리의 다른 글
Spring 참고 사이트 (0) | 2009.12.13 |
---|---|
AOP : Aspect Oriented Programming (0) | 2009.12.13 |
빈 라이프 사이클 (0) | 2009.12.13 |
제어의 역행 / 의존성 주입(Inversion of Control / Dependency Injection) (0) | 2009.12.13 |
Spring Framework의 개요 (0) | 2009.12.13 |