본문 바로가기

자바스토리/Spring

Spring MVC Project 셋팅(Spring3.1+Mybatis+Mysql+Tomcat7)

##준비

Mybais 다운로드

Mysql 다운로드 및 설치 - http://soft33.tistory.com/entry/mysql-%EC%84%A4%EC%B9%98

Tomcat7 다운로드 - http://tomcat.apache.org/download-70.cgi


1.프로젝트 생성






Run As - Run on Server - Hello world!를 확인한다.



페이지에 문자가 깨져서 나왔다면 페이지 최상단에 다음 내용을 추가해준다.
<%@ page language= "java" contentType ="text/html; charset=UTF-8" pageEncoding ="UTF-8"%>

pom.xml - Maven설정파일
pom.xml 마우스오른쪽 클릭<Maven<Add Dependency mybatis와 mysql 설정해준다. 혹은 pom.xml더블클릭하여  Dependencies에서
추가할 수 있다.


Group Id : org.mybatis 
Artifact Id: mybatis
Version : 3.2.2

Group Id : org.mybatis 
Artifact Id: mybatis-spring
Version : 1.2.0

Group Id : mysql 
Artifact Id: mysql-connector-java
Version : 5.1.31

Group Id : org.springframework 
Artifact Id: spring-jdbc
Version : 3.2.3.RELEASE

메이븐 dependency정보 찾기 url - http://search.maven.org/#search%7Cga%7C1%7C








pom.xml 파일을 저장후 Maven 라이브러리 목록을 확인해보자.

mybatis, mybatis-spring, spring-jdbc, sql커넥터의 jar를 자동으로 다운로드하여 라이브러리에 추가한다.
전지전능 Maven mybatis, mybatis-spring, mysql-connector, spring-jdbc 다운확인


src<main<WEB-INF<spring<root-context.xml에 빈 추가(파일오른쪽 클릭 Bean Definition) 혹은 더블클릭하여 beans에서 추가

Bean Definition
Id : dataSource
Class[Browse]: org.apache.ibatis.datasource.pooled.PooledDataSource

next - add Properties
name : driver
value : com.mysql.jdbc.Driver

name : url
value : jdbc:mysql://localhost:3306/test

name : username
value : root

name : password
value : pass


Bean Definition
Id : sqlSessionfactory
Class[Browse]: org.mybatis.spring.SqlSessionFactoryBean -Maven에서 설정해놓았던 mybatis-spring-1.2.0.jar에있는 class사용

next - add Properties
name : dataSource
value : dataSource

name : configLocation
value : classpath:/mybatis/mybatis-config.xml 오류무시체크 후 Finish mybatis-config.xml은 후에 생성함.


Bean Definition
Id : transactionManager
Class[Browse]: org.springframework.jdbc.datasource.DataSourceTransactionManager

next - add Properties
name : dataSource
value : dataSource



Bean Definition
Id :sqlSession
Class[Browse]: org.mybatis.spring.SqlSessionTemplate

next - add Constructor Args (!)확인
value : 
ref : sqlSessionFactory





     <bean id ="dataSource" class="org.apache.ibatis.datasource.pooled.PooledDataSource" >
            <property name ="driver" value= "com.mysql.jdbc.Driver"></property >
            <property name ="url" value= "jdbc:mysql://localhost:3306/test" ></property >
            <property name ="username" value="root"></ property>
            <property name ="password" value= "tlsrlqja7"></property >
     </bean >
     <bean id ="sqlSessionFactory" class= "org.mybatis.spring.SqlSessionFactoryBean">
            <property name ="dataSource" ref= "dataSource"></property >
            <property name ="configLocation"
                 value= "classpath:/mybatis/mybatis-config.xml" >
            </property >
     </bean >
     <bean id ="transactionManager"
           class="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
            <property name ="dataSource" ref= "dataSource"></property >
     </bean >
     <bean id ="sqlSession"
            class= "org.mybatis.spring.SqlSessionTemplate" >
            <constructor-arg ref= "sqlSessionFactory"></constructor-arg >
     </bean >

완료하였다면 위와같은 bean이 생겼을것이다.
P.S <constructor-arg index="0" ref= "sqlSessionFactory" ></constructor-arg >
index="0" 생성자 주입의 경우 constructor-arg를 사용하여 지정한다. constructor-arg는 property요소와 달리 name 속성을 갖지 않는다.
생성자 인자들의 타입이 동일할 경우 index를 이용하여 구분한다. 0~ index대신 type="java.lang.String"을 이용하여 구분할 수도있다.

mybatis-config.xml 생성
src/main/resources/mybatis/mybatis-config.xml을 생성하자.
<?xml version="1.0" encoding= "UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

<configuration>
    <mappers >
        <mapper resource ="/mybatis/Mapper.xml"/>
    </mappers >
</configuration>

Mapper.xml 생성
src/main/resources/mybatis/Mapper.xml을 생성하자.
<?xml version="1.0" encoding= "UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
<mapper namespace= "userControlMapper" >
    <select id ="selectSample" parameterType="java.util.HashMap" resultType="java.util.HashMap">
        select *
        from user
        where name = #{name}
    </select >
 
    <insert id ="insertTable01" parameterType="java.util.HashMap" >
        insert into user
        (name, email)
        values
        ( #{name}, #{email} )
    </insert >
</mapper>

완성되었다. Test 해보자. 프로젝트만들때 자동으로 생성된 HomeController.java를 사용하여 테스트 해보자.
추가한 코드는 구분해놓았다.
아래 테스트코드는 mysql이 실행되어있어야 하며 test DB에 user테이블 및 name 컬럼에 데이터가 있어야 작동한다.

package com.project.shinP3;

import java.text.DateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;

import org.apache.ibatis.session.SqlSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
* Handles requests for the application home page.
*/
@Controller
public class HomeController {

     @Autowired
     private SqlSession sqlSession;

     private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
    
     /**
     * Simply selects the home view to render by returning its name.
     */
     @RequestMapping(value = "/", method = RequestMethod.GET)
     public String home(Locale locale, Model model) {
          logger.info("Welcome home! The client locale is {}.", locale);
         
          Date date = new Date();
          DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
         
          String formattedDate = dateFormat.format(date);
         
          model.addAttribute("serverTime", formattedDate );       
          HashMap<String, String> input = new HashMap<String, String>();
        input.put("name", "shin");
        List<HashMap<String, String>> outputs = sqlSession.selectList("userControlMapper.selectSample", input); 
        System.out.print(outputs.toString());


          return "home";
     }
    
}