티스토리 뷰

Spring

[05] Spring + Mybatis + mysql 설정

민구글 2017. 1. 11. 17:03

안녕하세요. MIN-IT입니다.


이번시간은 스프링 프로젝트와 DB(Mysql)을 연결하는 시간을 가지겠습니다.

 

퍼가실 때 댓글을 남겨주시면 감사하겠습니다.

 

http://min-it.tistory.com

 



출처: http://min-it.tistory.com/5 [MIN-IT]

출처: http://min-it.tistory.com/5 [MIN-IT]

안녕하세요. MIN-IT입니다.


이번시간은 스프링 프로젝트와 DB(Mysql)을 연결하는 시간을 가지겠습니다.

 

퍼가실 때 댓글을 남겨주시면 감사하겠습니다.

 

http://min-it.tistory.com

 



출처: http://min-it.tistory.com/5 [MIN-IT]

출처: http://min-it.tistory.com/5 [MIN-IT]

안녕하세요. MIN-IT입니다.


이번시간은 스프링 프로젝트와 DB(Mysql)을 연결하는 시간을 가지겠습니다.

 

퍼가실 때 댓글을 남겨주시면 감사하겠습니다.

 

http://min-it.tistory.com



출처: http://min-it.tistory.com/5 [MIN-IT]

출처: http://min-it.tistory.com/5 [MIN-IT]

출처: http://min-it.tistory.com/5 [MIN-IT]

출처: http://min-it.tistory.com/5 [MIN-IT]

출처: http://min-it.tistory.com/5 [MIN-IT]

안녕하세요. MIN-IT입니다.


이번시간은 스프링 프로젝트와 DB(Mysql)을 연결하는 시간을 가지겠습니다.

 

퍼가실 때 댓글을 남겨주시면 감사하겠습니다.

 

http://min-it.tistory.com



출처: http://min-it.tistory.com/5 [MIN-IT]

출처: http://min-it.tistory.com/5 [MIN-IT]

출처: http://min-it.tistory.com/5 [MIN-IT]

출처: http://min-it.tistory.com/5 [MIN-IT]

출처: http://min-it.tistory.com/5 [MIN-IT]ㅇ

안녕하세요. MIN-IT입니다.


이번시간은 스프링 프로젝트와 Mybatis + mysql 설정하는 시간을 가지겠습니다.


퍼가실 때 댓글을 남겨주시면 감사하겠습니다.


http://min-it.tistory.com




이번시간은 스프링 개발 중 많이 사용되는 mybatis을 연동하여

SQL 처리의 생산성을 높이는 설정 할 것입니다.


Spring에서 mybatis를 왜 사용할까??


스프링 프레임워크의 장점 중 하나는 다양한 프레임워크와 합쳐질 수 있습니다.

예를 들어 스프링을 중심으로 다른 프레임워크를 사용할 수 있기 때문에

다양한 환경들을 그대로 사용할 수 있는 장점을 가지고 있습니다.


따라서 스프링이 자체적으로 가지고 있는 spring-JDBC가 있지만

그보다(spring-JDBC) 개발을 효율적으로 할 수 있는 Mybatis를 설정을 하는 겁니다.




Mybatis가 JDBC보다 좋은점은 뭘까??


1.간결한 코드처리가 가능하다.

(JDBC는 try-catch-finally처럼 데이터를 처리하기까지 많은 코드를 직접작성해야한다.

하지만 mybatis는 이러한 코드를 상당히 줄일 수 있어 개발속도가 향상됩니다.

Spring과 mybatis를 같이 사용하면 코드 제작 없이 JDBC의 처리가 가능합니다.)


2.SQL문을 따로쓴다.(어떻게보면 코드를 재사용한다고 생각할 수도 있다.)

 (JDBC는 SQL문을 처리하기 위해 별도의 파일을 작성하는등 번거로운 작업이많다.

Mybatis는 XML이나 애노테이션방식으로 SQL문을 별도로 처리가능하다.

==>별도로 처리도 가능하고 / JDBC처럼 사용해도 되고

따라서 많은 양의 SQL에 대해서는 별도의 XML파일에서 작업하여 간결함을 유지)


3.Mybatis-Srping이 있어 코드의 양이 줄여진다.

(스프링 프레임워크에서 mybatis-Spring라이브러리를 이용하면

SQL 문의 호출없이도 데이터를 얻을 수 있다.

따라서 스프링에서는 mybatis와 스프링을 연계하면 코드의 양을 줄일 수 있다)



MyBatis는 스프링에서 어떻게 사용될까??

스프링에서는 크게

1.UI를 담당하는 부분(view)

2.사용자의 요구사항을 처리하는 부분(service)

3.데이터를 처리하는 부분(DAO)


이 있습니다.


DAO(Data Access Object)는 Mybatis를 호출하여 사용하는 구조입니다.


따라서 스프링(mybatis-Spring)+Mybatis설정을 한

SqlSessionTemplate을 DAO에 주입하는 실습을 진행할 것입니다.



1.실습에 필요한 라이브러리를 다운로드 받습니다.

1.Mybatis

(http://mvnrepository.com/artifact/org.mybatis/mybatis/3.4.1)



2.Mybatis-Spring

(http://mvnrepository.com/artifact/org.mybatis/mybatis-spring/1.3.0)




2. 각각 <dependecy>를 복사하여 프로젝트의 pom.xml에 추가합니다.

(pom.xml에 추가후 저장하면 자동으로 라이브러리를 다운로드합니다.)




3. 추가 후 테스트를 위한 라이브러도 추가해줍니다.


        <!-- Spring-jdbc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
       
        <!-- Spring-test -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>


복사후 위와 동일하게  pom.xml에서 추가합니다.




4. root-context.xml을 수정합니다.

root-context.xml은 스프링과 관련된 설정을 하는 곳으로

웹과 관련되지 않은 모든 자원을 설정하는 곳입니다.


(servlet-context.xml은 웹과 관련된 설정을 하는 곳입니다.)



프로젝트-src-main-webapp-WEB-INF-spring-root-context.xml에서 namespaces클릭


namespaces에서 aop/beans/context/mybatis-spring 클릭후 저장(컨트롤+s)






저장을 한후 namespaces가 아닌 Source를 클릭하고

컨트롤+스페이스를 눌러 태그들을 보면 태그들이 추가되었습니다.




이것을 통해 root-context.xml에서 namespaces탭은

XML문서 내에 어떤 태그나 속성을 설정해주는 역할을 한다는 것을 알 수 있었습니다.

(namespaces의 체크된 것들을 해제하면 보이는 태그(컨트롤+스페이스)들이 보이는 화면보다 적게 나옵니다^^)



또한 namespaces탭에서 체크한것들이 뭔지 Source에서 확인도 가능합니다.






5.DataSource 설정하기


DataSource는 JDBC의 커넥션을 처리하는 기능을 가지고 있어 DB와 연동 작업에 반드시 필요합니다.


(스프링과 mybatis를 같이 사용하는 경우 주로 스프링 설정으로 JDBC연결을 처리하는

경우가 많기 때문에 spring-jdbc 모듈의 클래스를 이용하여

DataSource라는 것을 추가하는 것입니다.)


(복사-붙여넣기 하세요)


    <!-- jdbc모듈을 이용하여 dataSource추가하기. -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://127.0.0.1:3306/test1"></property>
        <property name="username" value="root"></property>   
        <property name="password" value="1234"></property>
    </bean>


수정해야할부분

1.포트번호가 3306이 아닌 다른번호로 했을시에만 수정합니다.

2.데이터베이스(mysql)에서 자신이만든 스키마명

3.mysql ID명

4.mysql pasword명


root-context.xml의 Source의 </beans>안에다 추가해줍니다.




id="dataSource"로 되어있는데 id의 역할은 스프링 내에서 특정한 객체(빈)을 찾기 위한 이름입니다.


<bean id ~ > 라고 되어있는데 만약 여러 개의 <bean>들을 생성했을경우 다른 곳에서 <bean>들중에 원하는 <bean>을 찾고 싶을때 <bean의 id>값을 통해서 찾는 것입니다.

(빈이 여러개일때 특정 빈을 찾을때 사용한다 생각하세용)




6.설정한 DataSource가 제대로 작동되는지 테스트를 합니다.


pom.xml에서 spring-test 라이브러리(모듈)을 추가 했기 때문에

스프링을 WAS상에서 동작시키지 않아도 테스트를 진행해 볼 수 있습니다.


프로젝트 - 하위폴더 src/test/java에서

testDataSource.java를 생성한다.





new - Junit Test Case를 클릭




Name지정후  Finish



package org.hello.web;

import java.sql.Connection;

import javax.inject.Inject;
import javax.sql.DataSource;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(
        locations ={"file:src/main/webapp/WEB-INF/spring/**/*.xml"})

public class testDataSource {
   

   
    @Inject
    private DataSource ds;
   
   
    @Test
    public void testDS() throws Exception{

       
        try(Connection con = ds.getConnection()){
            System.out.println("dataSource설정 성공");
            System.out.println(con);
        }catch(Exception e){
            System.out.println("실패");
            e.printStackTrace();
        }
    }
   


}


테스트를 실행하기전에 pom.xml에서

junit을 찾아 버전을 4.12로 바꿔서 테스트하시는게 안정적입니다.







테스트가 성공적이면 초록색바가 생깁니다.


DataSource가 정상적으로 실행이 되니

Mybatis와 Mysql을 연동시켜보겠습니다.


Mybatis와 스프링연동을 하기위해선 SqlSessionFactory가 있어야합니다.

SqlSessionFactory는 DB와의 연결과 SQL의 실행을 하기위해 필요한 객체입니다.

또한 Connection을 생성하고 처리하는 기능도 있습니다.


스프링에서 SqlSessionFactory를 생성해주기위해 SqlSessionFactoryBean이라는 클래스를 설정해야합니다. DB부분은 웹 부분이 아니기때문에 root-context.xml에서

설정을 해줍니다.



복사-붙여넣기하세요

(프로젝트-src-main-webapp-WEB-INF-spring-root-context.xml)


     <!--  mybatis와 스프링 연동작을 하기위한 SqlsessionFactory == DB연결 및 SQL의 실행을 대한객체 -->


     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
             <property name="dataSource" ref="dataSource"></property>
   

 </bean>






위에서 잠깐 설명드렸지만 Spring은 다른 프레임워크를 사용할 수 있기 때문에

다양한 환경들을 그대로 사용할 수 있는 장점을 가지고 있습니다.

따라서 저희는 Mybatis를 SQL Mapping 프레임워크로 별도의 설정 파일을 가지고 실습을 해보겠습니다.

(이렇게 별도의 설정 파일을 만들게되면

1. 스프링 설정 파일

2. Mybatis 설정 파일

각각 별도로 설정하여 관리가 가능 하다는 것  입니다.^^)



mybatis-config.xml 파일을 생성합니다.


프로젝트-src/test/resource 오른쪽 마우스 - new - Other




XML입력후-XML File클릭 - next



file name - Finish



만들어진 xml파일에 복사-붙여넣기합니다.


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<configuration>

</configuration>





마지막으로 mybatis-config.xml파일이 스프링을 실행할때마다

같이 실행되도록 해주는 작업이 필요합니다.

root.context.xml에서 설정을 해주면 됩니다.



아까 작성한 sqlSessionFactory를 지우고 복사-붙여넣기 하거나

수정을 합니다.


     <!--  mybatis와 스프링 연동작을 하기위한 SqlsessionFactory == DB연결 및 SQL의 실행을 대한객체 -->
     
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
             <property name="dataSource" ref="dataSource"></property>
            
                  <!-- mybatis-config.xml이 스프링 시작될때 같이 실행되도록 설정하기  -->
             <property name="configLocation" value="classpath:/mybatis-config.xml"></property>
            
     </bean>






여기까지하시면 스프링이 동작할 때 mybatis-config.xml (mybatis설정파일)도

동시에 동작하는 작업까지 하신겁니다.



끝내기에 앞서 좀 어려울수도 있지만 간단히 classpath라는 것을 설명해드리겠습니다.

문득 보고 따라하셨지만


classpath라는 것은 프로젝트의 최상위 폴더에 있는 것으로

xml으로 저장이되며 파일들의 실제경로들이있습니다.


classpath / classpath* 를 사용하는데

classpath인 경우는 classes폴더와 jar파일을 순환하면서

처음 발견되는 파일(1개)만

가져오는 것이고

classpath*는 calsses폴더와 jar파일을 순환하면서

발견되는 파일 모두 가져오는 것입니다.




<property name="configLocation" value="classpath:/mybatis-config.xml"></property>

mybatis-config.xml의 폴더경로는 src/main/resources/mybatis-config.xml인데 classpath가 뭐길래

mybatis-config.xml를 어떻게 참조하길래 실행 시 경로에러가 안나는걸까

궁금하신 분이 계실거 같습니다.




우선 프로젝트 오른쪽마우스-Properties를 클릭합니다.



스프링 프로젝트를 생성하자마자 properties-Deployment Assembly를 보시면

src/main/java or resource는 WEB-INF/calsses를 가리키고 있습니다.


즉, src/main/java나 main/java/resource의

classpath src/main/webapp/WEB-INF/classes

라고 이해하시면 되겠습니다.


따라서 classpath의 위치를 변경하고싶다면

보이시는 화면의 Deploy path를 변경하시면 되겠습니다.






프로젝트를 실행하게되면

노란색깔 4개의폴더 (resource/java/test..)의

각각 안에 들어있는 파일들이

자동으로  classes폴더에 컴파일된 파일들이 옮겨집니다.

(이때 저희가만든 mybatis.config.xml이

classes폴더 안에 들어간다고 생각하시면됩니다^^)



즉, 간단히 설명드리자면


1.프로젝트 생성시 src/main/resource는 classes폴더를 참조하고 있다.


2.프로젝트가 실행되자마자 classes폴더 안으로

src/main/resource안의 파일들이 옮겨진다

(classes폴더 안으로 컴파일된 mybatis.config.xml이 생성된다.)


3.classpath가 jar파일이나 classes파일을 순환하면서

mybatis.config.xml를 찾는다.



여기까지 MIN-IT였습니다.


다음시간에는 MVC를 다루어보도록 하겠습니다.




* 포스팅을 마치겠습니다.

궁금하거나 잘못된 부분이있다면 알려주시면 감사하겠습니다.*

댓글