티스토리 뷰

요즘 거의 codeigniter와 classic asp로 개발을 하다 막상 mybatis로 작업을 하려다보니

이것저것 생각이 나지 않고 헷갈리는 부분이 많아 나를 위해 기록도 해 놓을 겸

나처럼 고생하시는 분들께 조금이나마 도움이 될까 해서 mybatis에 대한 포스팅 시작~

 

 

 

마이바티스란?

"자바 프레임워크의 하나로 마이바티스(MyBatis)는 자바 퍼시스턴스 프레임워크의 하나로 XML 서술자나 애너테이션(annotation)을 사용하여 저장 프로시저나 SQL 문으로 객체들을 연결시킨다" 라고 위키백과에 등록되어 있는데

간략히 정리하자면 SQL 관련 명령문을 좀더 간략하고 편하게 사용할 수 있게 해주는 프레임워크라 할 수 있다.

 


"백문이 불여일타"라고 시작해 보자

 

이클립스를 통해 아래와 같이 Maven Project를 생성하자

(프로젝트명은 MyProject로 지정하고, Package는 com.project.my) 

 

 

 


시작하기 전에 아래 몇 가지를 먼저 설정하자 

(아래 놈들 때문에 헤매였는데 저와 같은 오류를 범하지 않았으면 하는 바램으로 기재.. 물론 필수는 아님 ㅎㅎ)

 

1. JRE System Libray [javaSE - ??] 버젼 설정

   (생성된 프로젝트 "MyProject"에서 마우스 우측 클릭 > Properties 클릭 후 아래와 같이 Java Version을 1.8로 변경

 

 

 

2. JRE System Libray 삭제 및 생성 

   (Build path specifies execution environment JavaSE-1.6. warning. There are no JREs installed 

    in the workspace that are strictly compatible with this environment. 오류 제거)

 

 

Remove 후 Add Libray 클릭하여 추가 하면 됨

 


자~ 그럼 시작 하자

 

MyProject가 생성되면 첫째로 pom.xml을 수정이 필요하다

(Spring과 MyBatis에 연동 및 각종 라이브러리를 설정 필요)

 

 

 

위 pom.xml을 더블 클릭 후 Overview 화면에서 Propertis 영역의 java-version을 더블클릭하여 1.8로 변경

 

 

 

springframework-version도 4.3.3으로 변경해 줍니다

 

 

 

참고로 version은 꼭 4.3.3일 필요는 없으며 최신 version은 mvnrepository 사이트에 접속하여 확인

https://mvnrepository.com/artifact/org.springframework/spring-context

 

 

 

MyBatis 사용에 필요한 필수 라이브러리를 추가하자

pom.xml 을 클릭 후

 

Junit은 version만 4.12로 변경하고 

 

<dependencies>  </dependencies> 사이에 다음의 항목을 추가 한다

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
        <!-- Test -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version> 
            <scope>test</scope>
        </dependency>        
 
        <!-- MyBatis 라이브러리 -->             
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.4</version>
        </dependency>        
                    
        <!-- MyBatis-Spring 라이브러리 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.1</version>
        </dependency>                    
        
        <!-- Spring-jdbc 라이브러리 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
        
        <!-- DB별 jdbc 라이브러리 (선별하여 사용)-->
        <!-- Mysql -->
        <dependency>
           <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
           <version>6.0.6</version>
        </dependency>
        
        <!-- mariadb -->
        <dependency>
            <groupId>org.mariadb.jdbc</groupId>
            <artifactId>mariadb-java-client</artifactId>
            <version>2.3.0</version>
        </dependency>
        
        <!-- oracle -->
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc14</artifactId>
            <version>10.2.0.4.0</version>
        </dependency>
        
        <!-- mssql -->
        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>mssql-jdbc</artifactId>
            <version>7.4.1.jre11</version>
        </dependency>  
 
        <!-- spring-test 라이브러리 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
cs

위 라이브러리를 pom.xml에 삽입 후 저장

 

 

참고로 Java 버젼과 컴파일 버젼이 맞지 않아 생기는 오류를 사전에 해결하고자 한다면

build 영역도 아래와 같이 수정하자 (개인적으로 추천)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<!-- 변경 전 -->
 
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                    <compilerArgument>-Xlint:all</compilerArgument>
                    <showWarnings>true</showWarnings>
                    <showDeprecation>true</showDeprecation>
                </configuration>
            </plugin>
 
 
<!-- 변경 후 (source 및 target) 만 아래와 같이 수정 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <source>${java-version}</source>  
                    <target>${java-version}</target>
                    <compilerArgument>-Xlint:all</compilerArgument>
                    <showWarnings>true</showWarnings>
                    <showDeprecation>true</showDeprecation>
                </configuration>
            </plugin>
cs

 

 

 

저장 후 우측의 Maven Dependencies 를 클릭하여 주입(다운로드)된 라이브러리를 확인할 수 있다

(참고로 다운로드에 약간의 시간이 필요하며, 좌측에 라이브러리가 보이지 않는다면 코딩 오류라 할 수 있다)

 

 

 

 

참고 : 라이브러리별 버젼 확인

 

MySQL 커넥터 JDBC
https://mvnrepository.com/artifact/mysql/mysql-connector-java

mariadb 커넥터 JDBC 
https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client 

MyBatis 
https://mvnrepository.com/artifact/org.mybatis/mybatis

MyBatis-Spring 
https://mvnrepository.com/artifact/org.mybatis/mybatis-spring

Spring-jdbc
https://mvnrepository.com/artifact/org.springframework/spring-jdb

Spring-test
https://mvnrepository.com/artifact/org.springframework/spring-test

 

 


root-context.xml 설정

 

root-context는 웹(View)과 관련되지 않은 객체(bean)를 설정하는 곳으로

Service, MultipartResolver(파일 업로드), Interceptor(로그인), Repository(DAO), DB등 비즈니스 로직과 관련된 설정.

 

MyBatis를 사용하기 위해

DataSource(jdbc를 통해 l데이터베이스와의 에 접속할 수 있게 하는 객체)와

SqlSessionFactory(SqlSession 인스턴스를 만들수 있으며, SqlSession은 데이터베이스에 대해 SQL명령어를 실행하기 위해 필요한 모든 메소드를 가지고 있다)를 우선 설정하자

 

좌측 root-context 클릭 후 우측의 Namespaces와 같이 체크해준다   

 

 

 

위 체크 후 하단의 Source를 클릭 후 dataSource 영역을 추가 한다

(필자는 mysql을 사용)

 

1
2
3
4
5
6
7
8
    <!-- MySQL JDBC DataSource -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://127.0.0.1:3306/myprojectdb?useSSL=false&amp;serverTimezone=UTC"></property>
        <property name="username" value="root"></property>
        <property name="password" value="apmsetup"></property>
    </bean>
    
cs

Mariadb의 경우 아래의 영역면 변경하여 사용

 

 


dataSource(데이터베이스 연동) 설정이 정상적인지 테스트!

 

Test1 - db 커넥션이 정상적인지 심플하게 확인하기

 

1) 우선 src/test/java에 DataSourceTest 이름으로 Class를 생성 

 

 

 

2) DB Connection 아래와 같이 작성 

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package com.project.my;
 
import java.sql.Connection;
import java.sql.DriverManager;
import org.junit.Test;
 
public class DataSourceTest {
 
    @Test
    public void testConnection() throws Exception{
        
        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/myprojectdb?serverTimezone=UTC","root","apmsetup");
        System.out.println(con);
        
    }
    
}
cs

 

 

3) DataSourceTest에서 마우스 우측 클릭하여 JUnit Test를 실행 

 

 

Console에 아래와 같이 출력되면 Connection 정상적으로 이루어짐 

 

 

 

 

Test2 - dataSource로 커넥션 확인하기

위 Test1과 동일하게 DataSourceTest2 class를 생성하고 JUnit Test를 해보자

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package com.project.my;
 
import javax.inject.Inject;
 
import java.sql.Connection;
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/**/root-context.xml"})
 
public class DataSourceTest2 {
    
    @Inject
    private DataSource dataSource;
    
    @Test
    public void testConnection() throws Exception {
        
        try(Connection con = dataSource.getConnection()) {
            
            System.out.println(">>>>>>>>> mysql datasource connection Start <<<<<<<<< ");
            System.out.println(con);
            System.out.println(">>>>>>>>> mysql datasource connection End <<<<<<<<< ");
            
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}
 
cs

 

 

Console창에 아래와 같이 출력되면 정상!

 

 


Mybatis와 Mysql 연결을 위한 설정

 

"root-context.xml"에 아래와 같이 sqlSesqlSessionFactory와 sqlSession bean을 추가한다

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
       <!-- SQL 실행시 객체를 생성해주는 sqlSessionFactory 
         마이바티스에서는 SqlSession를 생성하기 위해 SqlSessionFactory를 사용한다. 
         세션을 한번 생성하면 매핑구문을 실행하거나 커밋 또는 롤백을 하기 위해 세션을 사용할수 있다.    
    -->
    <bean id="sqlSessionFactory" name="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation"  value="classpath:/mybatis-config.xml" />
    </bean>
   
    <!--  SqlSessionTemplate은 마이바티스 스프링 연동모듈의 핵심이다 
          SqlSessionTemplate은 SqlSession을 구현하고 코드에서 SqlSession를 대체하는 역할을 한다.
          SqlSessionTemplate 은 쓰레드에 안전하고 여러개의 DAO나 매퍼에서 공유할수 있다.    
      -->    
    <bean id="sqlSession" name="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="clearCache">
        <constructor-arg name="sqlSessionFactory"  ref="sqlSessionFactory" />
    </bean>
       
cs

 

 

 


 

sqlSessionFactory의 configLocation property에 지정된 xml 파일을 다음과 같이 생성한다

 

 

src/main/resources 경로에 mybatis-config.xml 생성

 

 

 

mybatis-config.xml에 다음과 같이 코드를 삽입한다 (오타가 없도록 주의하자!)

 

1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
 
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
 
<configuration>
 
     
 
</configuration>
cs

 

 

설정이 끝났다

 


이제 Mybatis 설정이 잘 됐는지 테스트를 해보자

 

테스트 방법은 DataSourceTest2와 동일하게 해당 위치에 MyBatisTest라는 class 파일을 생성하고

 

 

 

아래와 같이 코드를 삽입한다

소스를 자세히 살펴보면 붉은 박스 영역 제외 하고 import는 DataSourceTest2와 동일한 것을 확인 할 수 있다

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package com.project.my;
 
import javax.inject.Inject;
 
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
 
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/**/root-context.xml"})
 
public class MyBatisTest {
    
      @Inject
       private SqlSessionFactory sqlFactory;
 
 
       @Test
        public void testFactory() {
            System.out.println(">>>>>>>>> sql session factory check Start <<<<<<<<<");
            System.out.println(sqlFactory);
            System.out.println(">>>>>>>>>sql session factory check End <<<<<<<<<");
        }
 
 
       @Test
        public void testSession() throws Exception {
            
            try(SqlSession session = sqlFactory.openSession()) {
                
                System.out.println(">>>>>>>>> mybatis sql session test Start <<<<<<<<<");
                System.out.println(session);
                System.out.println(">>>>>>>>> mybatis sql session test End <<<<<<<<<");
                
            } catch(Exception e) {
                e.printStackTrace();
            }
        }
 
}
 
cs

 

 

 

JUnit Test를 하여 Console 창에 아래와 같이 출력 되면 Mybatis의 모든 설정은 완료된 것이다.

 

 

 

다소 부족하지만 이글을 읽은 모든 분들께 도움이 되고자

 

하나하나 설명을 기재했는데 도움이 되셨는지 모르겠네요 글 읽어 주셔서 감사 드리며, 아울러

 

Mybatis 설정(위 내용)으로 간략히 리스트를 출력하는 설명은

 

"Spring(스프링) & mybatis(마이바티스) & mysql 예제로 따라하기" 게시글을 참고해 주세요

 

 

기타 : 뭔가 찜찜하다 싶으면 Maven 업데이를 해주시 것 잊지 마세요

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday