1. MyBatis란
객체 지향 언어인 자바의 관계형 데이터베이스 프로그래밍을 보다 쉽게 도와주는 프레임워크.
MyBatis는 JDBC를 보다 편하게 사용하기 위해 개발되었다.
2. MyBatis 특징
간결한 코드처리 가능
기존에는 DAO파일에 모든 SQL문을 작성하였다. 하지만, MyBatis에는 Mapper파일에 SQL코드를 입력해놓고 DAO파일에서 필요할 때 마다 가져와서 사용할 수 있다.
3. MyBatis 구성
*MyBatis 환경설정 파일(SqlSeesionConfig.xml) : MyBatis가 JDBC코드를 실행하는데 필요한 전반에 걸친 세팅을 함.
=> spring에서는 applicationContext.xml 이 그 역할을 대신한다.
- TypAlias 설정: 사용할 모델 클래스에 대한 별칭 설정. <typeAlias>
- DB연동을 위한 설정: DataBase에 어떻게 접속할 것인지에 대한 설정. <environment>
- Mapper설정 파일 등록: 매핑 설정이 어디있는지. <mapper>
*Mapper 설정 파일(XXX-mapper.xml, XXX-mapper.xml) : sql문과 관련된 설정을 하는 파일로서 MyBatis설정파일에 등록해야 한다.
< 일반적인 스프링 웹 프로젝트 구성 >
일반적으로 웹 프로젝트는 3개의 layer로 구성.
-
Presentation Layer : UI를 담당하는 구성 요소.
-
Business Layer :서비스 계층. 어떤 형태의 데이터가 필요하고, 반환될 것인지를 결정.
-
Data Access Layer : 데이터 처리를 전문으로 담당.
< MyBatis와의 구성 >
< MyBatis연동을 위한 준비 >
pom.xml 이용해서 필요한 jar파일들을 다운로드 해야한다.
Spring과 MyBatis사이에는 두 프레임워크의 접착제 역할을 하는 MyBatis-Spring모듈이 필요하게 된다. 이를 위해서 pom.xml에 다음과 같은 프레임워크, 라이브러리를 추가해야 한다.
ojdbc
<!-- https://mvnrepository.com/artifact/oracle/ojdbc6 -->
<dependency>
<groupId>oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.3</version>
</dependency>
ojdbc의 경우 Maven에서 제공하지 않는 라이브러리 이다. 따라서, 위와 같이 dependency만 작성해주면 제대로 ojdbc를 다운받지 못한다.
pom.xml상단 부분에 ojdbc를 다운받을 수 있도록 repository를 추가해준다.
<!-- repository -->
<repositories>
<repository>
<id>datanucleus</id>
<url>http://www.datanucleus.org/downloads/maven2</url>
</repository>
</repositories>
MyBatis
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
</dependency>
MyBatis-Spring : Spring과 MyBatis를 연결하는 모듈
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.3</version>
</dependency>
commons-dbcp : jdbc의 Datasource사용을 위함
<!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
spring-orm : 객체를 DB랑 Mapping해준다.
그전에는 query의 몇번째 ?에 변수가 들어갈지 정했지만 이제는 VO 변수명을 적어주면 알아서 들어간다.
<dependency>
<groupId>org.springframework</groupId><!--바꿔주기-->
<artifactId>spring-orm</artifactId>
<version>${org.springframework-version}</version> <!--바꿔주기-->
</dependency>
src/main/resources 아래 mybatis폴더 생성 후, db.properties, mybatis-config.xml, mappers/board-mapper.xml 파일을 넣는다.
db.properties
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:xe
username=...
password=...
mybatis-config.xml : 마이바티스 설정파일
<configuration>
<!-- 별칭 설정 -->
<typeAliases>
<typeAlias type="com.mvc.upgrade.model.dto.BoardDto" alias="boardDto"/>
</typeAliases>
</configuration>
mappers/board-mapper.xml : sql문
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="myboard">
<resultMap type="boardDto" id="boardMap">
<result property="myno" column="MYNO"/>
<result property="myname" column="MYNAME"/>
<result property="mytitle" column="MYTITLE"/>
<result property="mycontent" column="MYCONTENT"/>
<result property="mydate" column="MYDATE"/>
</resultMap>
<select id="selectList" resultMap="boardMap">
SELECT MYNO,MYNAME,MYTITLE,MYCONTENT,MYDATE
FROM MYBOARD
ORDER BY MYNO DESC
</select>
</mapper>
oracle DB와 연동하기 위해 root-context.xml파일(applicationContext.xml)에 다음과 같은 내용을 추가한다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:mybatis/db.properties</value>
</list>
</property>
</bean>
<!-- dataSorce : db.properties 파일의 설정값을 읽어서 DB와 스프링을 연동시켜준다. -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${driver}"></property>
<property name="url" value="${url}"></property>
<property name="username" value="${username}"></property>
<property name="password" value="${password}"></property>
</bean>
<!-- SqlSessionFactoryBean클래스: SQL 실행시 객체를 생성해준다. -->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:mybatis/mybatis-config.xml"></property>
<property name="mapperLocations" value="classpath:mybatis/mappers/*-mapper.xml"></property>
</bean>
<!--sqlSession을 추가.
DB에 사용이 끝나면 sqlSessionFactory에 접근하여 커넥션을 close()를 하는 기능을 해준다.
이를 추가함으로써 SQL문을 사용할 때마다 커넥션을 일일히 끊어줘야하는 번거로움이 사라진다. -->
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="sqlSession"></constructor-arg>
</bean>
</beans>
classpath:란 무엇인가?
프로젝트 구조를 보면 다음과 같다.
src/main/java : java파일이 존재하며
src/main/resources : 설정파일이 존재한다.
이 안에 mybatis 폴더를 만들어서 mybatis와 관련된 설정파일을 작성할 것이다.
src/main/java 와 src/main/resources 폴더는 컴파일 되면 webapp/WEB-INF/classes 폴더 아래에 위치하게 되는데,
즉 classpath란 webapp/WEB-INF/classes 경로를 의미하게 된다.
따라서 Mybatis 설정 파일은 /src/main/resources 폴더 아래에 작성해야 한다.
'⚙️Backend > Spring' 카테고리의 다른 글
💡용어 정리💡 (0) | 2020.05.31 |
---|---|
💡Spring 동작과정 정리 💡 (1) | 2020.05.31 |
[Spring] MVC Project part 5 (6) | 2020.05.30 |
[Spring] MVC Project part 4 (0) | 2020.05.30 |
[Spring] MVC Project part 3 (0) | 2020.05.30 |