티스토리 뷰
요즘 거의 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&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 업데이를 해주시 것 잊지 마세요
'프로그래밍 > jsp·java' 카테고리의 다른 글
eclipse 유용한 플러그인(plugin) 추천 (0) | 2021.02.14 |
---|---|
Spring(스프링) & mybatis(마이바티스) & mysql 예제로 따라하기 (0) | 2019.09.29 |
Spring(스프링) & mybatis(마이바티스) 오류 정리 및 해결 방법 (0) | 2019.09.23 |
JAVA ·JSP 한글 깨지는 문제 해결 - 한글 인코딩 (0) | 2019.05.02 |
JAVA 개발을 위한 준비 - 설치 (0) | 2019.05.02 |