본문 바로가기

IT for developer/Spring

나도 한번 써봐야지 스프링 - 5


이제 DB를 이용해 보자.

우선 MySQL을 설치한다. 다운로드가 상당히 오래걸린다;

Spring에서 데이터 액세스 기술은 책 toby spring 3 11장에 자세히 기술되어 있다.

iBatis를 사용한 예제를 만들어보겠다.

MySQL에 user 정보를 위한 테이블을 생성하자.

CREATE TABLE `test`.`User_TB` (
  `id` VARCHAR(20) NOT NULL,
  `name` VARCHAR(45) NOT NULL,
  `email` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`id`)
)
ENGINE = InnoDB;

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&amp;
characterEncoding=utf8&amp;autoReconnect=true&amp;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