이제 DB를 이용해 보자.
우선 MySQL을 설치한다. 다운로드가 상당히 오래걸린다;
Spring에서 데이터 액세스 기술은 책 toby spring 3 11장에 자세히 기술되어 있다.
iBatis를 사용한 예제를 만들어보겠다.
MySQL에 user 정보를 위한 테이블을 생성하자.
DB 사용을 위해 pom.xml에 dependecy를 추가하자.
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>org.apache.ibatis</groupId>
<artifactId>ibatis-sqlmap</artifactId>
<version>2.3.4.726</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
설정파일 만들기
src/main/resources/ibatis/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="ibatis/sql/User.xml" />
</sqlMapConfig>
매핑파일 만들기
src/main/resources/ibatis/sql/User.xml 파일을 생성하고 다음과 같이 설정한다.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="User">
<typeAlias alias="User" type="sample.mvc.first.model.User" />
<resultMap id="userMap" class="sample.mvc.first.model.User">
<result property="name" column="id" javaType="string" jdbcType="varchar" nullValue="" />
<result property="id" column="name" javaType="string" jdbcType="varchar" nullValue="" />
<result property="email" column="email" javaType="string" jdbcType="varchar" nullValue="" />
</resultMap>
<sql id="User_allFields">
ID, NAME, EMAIL
</sql>
<select id="getUsereById" parameterClass="string" resultMap="userMap">
SELECT <include refid="User_allFields" /> FROM USER_TB WHERE ID = #id#
</select>
<insert id="insertUser" parameterClass="User" >
INSERT INTO USER_TB (<include refid="User_allFields" />)
VALUES (#id#, #name#, #email#)
</insert>
</sqlMap>
SqlMapClientFactoryBean 빈으로 등록하기
servlet-context.xml 파일에 다음 빈등록 설정을 추가한다.
<beans:bean id="dataSource1" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<beans:property name="driverClass" value="com.mysql.jdbc.Driver" />
<beans:property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test?useUnicode=true&
characterEncoding=utf8&autoReconnect=true&noAccessToProcedureBodies=true" />
<beans:property name="user" value="????" />
<beans:property name="password" value="????" />
</beans:bean>
<beans:bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<beans:property name="configLocation" value="classpath:/ibatis/SqlMapConfig.xml" />
<beans:property name="dataSource" ref="dataSource1" />
</beans:bean>
이제 프로그램을 작성해보자.
폼에서 아이디, 이름 , 이메일을 받아서 DB에 저장하는 간단한 예제를 만들어 보자.
DAO 만들기
UserDao 인터페이스와 UserDaoImpl 구현 클래스를 작성한다.
우선 insert 함수만 포함시킨다.
UserDao.java
package sample.mvc.first.dao;
import sample.mvc.first.model.User;
public interface UserDao {
public void insert(User user);
}
실제 DB 오퍼레이션을 수행하는 UserDaoImpl를 작성해보자.
UserDaoImpl.java
package sample.mvc.first.dao.ibatis;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import org.springframework.stereotype.Repository;
import sample.mvc.first.dao.UserDao;
import sample.mvc.first.model.User;
import com.ibatis.sqlmap.client.SqlMapClient;
@Repository
public class UserDaoImpl extends SqlMapClientDaoSupport implements UserDao {
public void insert(User user) {
getSqlMapClientTemplate().insert("insertUser", user);
}
@Autowired
public void injectsqlMapClient(SqlMapClient sqlMapClient) {
setSqlMapClient(sqlMapClient);
}
}
우선 Dao가 스프링 빈으로 등록되기 위해서 @Repository 라는 에노테이션을 사용한다. SqlMapClient를 DI 받아서 SqlMapClientDaoSupport에 지정해 주기 위하여 injectsSqlMapClient 함수(함수 이름은 상관없다) 를 통해 DI되도록 한다.
자세한 내용은 toby book p933~.
다음은 MyServiceImpl 에서 Dao를 사용하도록 아래 코드를 추가한다.
@Autowired UserDao userDao;
public void insertUser(User user) {
userDao.insert(user);
}
HomeController에 등록 폼과 등록 처리를 하기 위한 두 가지 컨트롤러 메소드를 추가한다.
@RequestMapping(value="/insertForm", method=RequestMethod.GET)
public void insertForm(@ModelAttribute User user) {
}
@RequestMapping(value="/insert", method=RequestMethod.POST)
public void submit(@ModelAttribute User user, SessionStatus sessionStatus) {
myService.insertUser(user);
}
마지막으로 두개의 jsp 페이지를 작성하자.
등록폼 insertForm.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<form:form commandName="user" action="insert" method="POST">
<fieldset>
<form:input path="id"/>
<form:input path="name"/>
<form:input path="email"/>
</fieldset>
<input type="submit">
</form:form
등록 후 페이지
insert.jsp