이번 MyBatis까지가 설정에 대한 내용이다. 빨리 끝내고 코딩을 하고 싶다...
MyBatis는 Sql Mapping 프레임워크다.
- SQL과 Object간의 관계를 매핑해주는 역할
- JDBC코드에 비해 처리하는 부분이 간결해지고, close 처리등이 지원
Spring에서의 사용
- 스프링은 MyBatis와의 연결을 위한 mybatis-spring 라이브러리를 이용해서 연동처리
JPA는 관계지향의 세계를 객체지향의 세계에 접목하는 느낌? 이고
MyBatis는 유틸리티의 성격이 강하다.
MyBatis의 장점 : SQL을 그대로 사용가능하다.
단점 : JPA보다는 성능이 조금 떨어진다.
https://mvnrepository.com/artifact/org.mybatis/mybatis/3.5.11
위의 사이트에 접속하여 dependency를 복사하여 porm.xml에 넣는다.
ctrl+s를 하면 자동으로 build를 한다.
그리고 mybatis spring 또한 라이브러리에 추가해보자
https://mvnrepository.com/artifact/org.mybatis/mybatis-spring/2.0.6
dependency를 복사하여 porm.xml에 넣는다.
그리고 또 설정해주어야하는게 jdbc모듈과 tx모듈을 관리해야한다.
tx : 트렌젝션 관리해주는 모듈
위의코드를 복사하여 test부분을 노랗게 칠한 부분으로 고쳐주면 끝!
이번엔 SqlSessionFactory의 설정이다.
root-context.xml에 MyBatis설정
MyBatis의 핵심 객체는 SqlSessionFactory타입의 객체
SqlSessionFactoryBean은 내부적으로 MyBatis의 SqlSessionFacory를 생성한다.
root-context.xml에 밑의 코드를 추가하자.
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
</bean>
그리고 또 마찬가지로 Test를 해보자
이미 만들어둔 DataSouceTests.java에서
@Autowired
private SqlSessionFactory sessionFactory;
@Test
public void testConnection2() {
try(SqlSession session = sessionFactory.openSession();
Connection con = session.getConnection()){
log.info(session);
log.info(con);
}catch(Exception e) {
e.printStackTrace();
}
}
위 코드를 추가하여 오류가 나는지 확인을 한다.
이렇게 뜨면 정상 작동 하는 것이다.
이제 인터페이스를 잡아주자
먼저, mapper라는 패키지와 TimeMapper라는 인터페이스를 생성해준다.
TimeMapper인터페이스의 코드는
package org.zero.mapper;
import org.apache.ibatis.annotations.Select;
public interface TimeMapper {
// ;없어야한다
@Select("select sysdate from dual")
String getTime();
}
코드를 작성하셨다면 root-context.xml을 가서
위와같이 체크한 후
<mybatis-spring:scan base-package="org.zero.mapper"/>
이 코드도 root-context.xml에 추가해준다.
다 해주셨다면 똑같이 테스트를 해보자.
이 테스트가 가장 중요하다고하니 꼭꼬ㄲ꼭 해보길 바란다.
클래스 하나를 생성해주고
package org.zero.persistance;
import java.sql.Connection;
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.zero.mapper.TimeMapper;
import lombok.extern.log4j.Log4j;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
@Log4j
public class TimeMapperTests {
@Autowired
private TimeMapper timemapper;
@Test
public void testTime1() {
log.info(timemapper.getTime());
}
}
실행을 시켜서 시간이 나오면 성공이다.
성공!
여기까지가 mybatis와 spring이 연동이 된 것이다.
사실 어노테이션으로도 가능하지만 코드가 길어지게된다면 지저분해지고 관리가 힘들다
그리고 어노테이션이 정적이라서 동적으로 만들기 힘들어진다.
다시 돌아가서
interface가 기준이 되어 xml을 생성할 것이다.
폴더를 생성할 때 가능하면 하나씩 생성하자. 그리고 XML파일도 인터페이스파일과
이름을 동일하게!
xml로 확인할 getTime2를 생성해준다.
그 다음에 XML파일에 DTD라는 것을 넣어줄 것이다. DTD는 쉽게말해 코드를 자동완성 시켜주는 것이다.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.zero.mapper.TimeMapper">
<select id="getTime2" resultType="string">
select sysdate from dual
</select>
</mapper>
이제 세팅이 되었으니 test코드를 TimeMapperTests.java에서 확인을 해보자.
@Test
public void testTime2() {
log.info(timemapper.getTime2());
}
위 코드로 실행을 하면?
아까와 동일하게 결과가 잘 찍힌다 ㅎㅎ
거의 다 왔다.
그 다음은 두가지 설정이 추가되는데 주의해야한다.
- 라이브러리 추가
- 설정
- DataSource 설정 변경
- 프로퍼티 파일을 반드시 추가
위의 리스트만 하면 된다.
log4jdbc-log4j2 설정을 해보자.
https://mvnrepository.com/artifact/org.bgee.log4jdbc-log4j2/log4jdbc-log4j2-jdbc4.1/1.16
오래된 버전이지만 어쩔 수 없다.
이전 dependency들과 동일하게 porm.xml에 추가해준다.
이렇게 두군데에 프로퍼티 파일을 확실하게 넣어준다.
그리고 root-context.xml의 경로만 바꾸어주면 끝 ! 두근 두근 마지막 테스트다.
성공! 다음 글부터는 드디어 코딩한다~~ 설정 끝!

'Spring' 카테고리의 다른 글
[Part 1] Spring Controller #10 (0) | 2023.01.15 |
---|---|
[Part 1] 스프링 MVC #9 (0) | 2023.01.14 |
[Part 1] HikariCP 설정 #7 (0) | 2023.01.12 |
[Part 1] DB연결하기 #6 (0) | 2023.01.10 |
[Part 1] 의존성 주입 실습(추가설명) #5 (0) | 2023.01.08 |