티스토리 뷰
[MyBatis]
개발자가 지정한 SQL, 저장 프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크이다. 쉽게 말해서 데이터베이스를 좀 더 간편하게 사용할 수 있도록 도와주는 프레임워크이다. MyBatis는 JDBC 코드와 수동으로 세팅하는 파라미터와 결과 매핑을 제거한다. 기존의 JDBC를 이용하여 프로그래밍하는 방식은 프로그램 소스 안에 SQL 문을 작성하였지만, MyBatis를 이용하면 SQL문을 프로그램에서 분리하여 XML 파일에 별도로 작성한다. 따라서 프로그래머가 기존의 JDBC를 사용할 때보다 프로그래밍하는 부담이 줄어들게 된다. 뿐만 아니라 SQL을 변경하고자 할 경우 기존처럼 프로그램을 수정하는 것이 아니라 XML 파일의 SQL 문만을 변경하면 되기 때문에 SQL 변환이 자유롭다는 특징이 있다.
MyBatis의 구조
Configuration 파일(SqlMapConfig.xml) : DB 설정과 트랜잭션 등 MyBatis가 동작하는 규칙을 정의
Mapper : SQl을 XML에 정의한 매퍼 XML 파일과 SQL을 인터페이스의 메소드마다 애노테이션으로 정의한 매퍼 인터페이스를 의미
(매핑 구문을 정의하는 방법은 애노테이션과 XML 방식 두 가지가 존재)
사용자는 CRUD(Create, Read, Update, Delete)에 대한 각각의 SQL문을 SqlMapConfig.xml 파일에 작성하면 MyBatisapi을 통해 자동으로 매핑된 Statement 객체들을 생성하여 이를 통해 DB에 SQL문을 실행하게 된다.
1. MyBatis라이브러리
스프링에서 MyBatis를 사용하기 위해 라이브러리가 필요한데, Maven을 이용하여 라이브러리를 관리하기 때문에 pom.xml에 dependency를 추가한다.
-> 이미 전에 pom.xml에 모두 추가해 놓음
나는 MySql을 사용하기 때문에
을 추가해주면 된다.
2. MyBatis와 DB 연결 설정
src/java/resources 폴더 밑에 config > spring 폴더 생성
spring 폴더 안에 context_datasource.xmll 파일 생성
-> web.xml에서 이 설정 파일을 읽을 수 있도록 설정한다.
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:config/spring/context-*.xml</param-value>
</context-param>
-> 최초 서버가 시작될 때, 해당 위치에 있는 context 파일을 모두 읽어들이는 것을 의미한다.
<!-- MySQL 설정 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost/firstspring"/>
<property name="username" value="아이디"/>
<property name="password" value="비밀번호"/>
</bean>3. MyBatis와 Spring의 연결
src/main/resources 폴더에 mapper 폴더 생성
기존 위의 spring 폴더에 context-mapper.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"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:/mapper/**/*_SQL.xml" />
</bean>
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSession"/>
</bean>
</beans>-> property의 name : 위에서 등록한 sqlSession 빈에서 사용할 이름이 dataSource
property의 ref : dataSource는 우리가 context-datasource.xml에서 정의한 빈을 참조하는 것을 의미
mapperLocations : 앞으로 작성할 SQL문이 위치할 장소
classpath:/mapper/**/*_SQL.xml : 앞으로 만들 다양한 SQL 모든 파일을 읽어오도록
sqlSessionTemplate : SqlSession을 구현하고 코드에서 SqlSession을 대체하는 역할을 한다.
4. DAO 작성
src/main/java 폴더에 fist.common.dao 패키지 생성
dao 패키지 안에 AbastractDAO.java 생성
package first.common.dao;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
public class AbstractDAO {
protected Log log = LogFactory.getLog(AbstractDAO.class);
@Autowired
private SqlSessionTemplate sqlSession;
protected void printQueryId(String queryId) {
if(log.isDebugEnabled()){
log.debug("\t QueryId \t: " + queryId);
}
}
public Object insert(String queryId, Object params){
printQueryId(queryId);
return sqlSession.insert(queryId, params);
}
public Object update(String queryId, Object params){
printQueryId(queryId);
return sqlSession.update(queryId, params);
}
public Object delete(String queryId, Object params){
printQueryId(queryId);
return sqlSession.delete(queryId, params);
}
public Object selectOne(String queryId){
printQueryId(queryId);
return sqlSession.selectOne(queryId);
}
public Object selectOne(String queryId, Object params){
printQueryId(queryId);
return sqlSession.selectOne(queryId, params);
}
@SuppressWarnings("rawtypes")
public List selectList(String queryId){
printQueryId(queryId);
return sqlSession.selectList(queryId);
}
@SuppressWarnings("rawtypes")
public List selectList(String queryId, Object params){
printQueryId(queryId);
return sqlSession.selectList(queryId,params);
}
}
'Framework > Spring' 카테고리의 다른 글
| Spring Framework(7) (0) | 2017.03.04 |
|---|---|
| Spring Framework(6) (0) | 2017.02.05 |
| Spring Framework(4) (0) | 2017.02.05 |
| Spring Framework(3) (0) | 2017.02.05 |
| Spring Framework(2) (0) | 2017.02.05 |
- Total
- Today
- Yesterday
- ACM Craft
- 1037
- 10809
- 조합 알고리즘
- mybatis
- acmicpc
- 위상정렬
- 이진 탐색
- acmpicpc
- 1085
- 약수
- combination
- 단어 공부
- 1157
- Java
- 2048 game
- 자료구조
- 13460
- 알고리즘
- 12100
- spring
- 파라메트릭
- 째로탈출2
- 알파벳 찾기
- BOJ
- 이진 검색
- 7576
- lottie
- parametric search
- 7569
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |