MyBatis
MyBatis란?
- MyBatis 는 개발자가 지정한 SQL, 고급 매핑을 지원하는 프레임워크이다.
- MyBatis 는 JDBC 코드와 수동으로 셋팅하는 파라미터와 결과 매핑을 제거한다.
- MyBatis 는 복잡한 JDBC코드를 걷어내며 깔끔한 소스코드를 유지한다.
-MyBatis 는 DAO계층을 대신한다.
-MyBatis 는 기존 DAO의 Interface의 구현클래스를 xml파일이 대신한다.
-스프링에서 사용하려면 MyBatis-Spring module을 다운로드 받아야 한다
- MyBatis는 기존 DAO계층을 대신한다.
기존 JDBC프로그램과 MyBatis의 차이점
MyBatis의 사용방법
MyBatis는 SpringFramework에서 제공하는게 아니라 모듈을 추가해야한다.
(Mybatis Module & MyBatis-Spring Module) 버전은 올린년도로 비교해서 호환성을 대충 맞춰준다.
pom.xml에 MVNRepository.com에서 가져온 코드 추가 후 MavenUpdate
<!-- MyBatis 마이바티스 설정 -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
MyBatis사용시 기본적으로 Spring-JDBC라이브러리가 필요하다.
1. root-context.xml에서 namespaces에 있는 myBatis 활성화
2. 활성화 된건지 확인 (root-context의 beans에 xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"확인)
3. SqlSessionFactory 빈 생성
MyBatis의 경우 interface와 xml파일은 반드시 이름이 동일해야 한다
테스트 진행
잘 작동하는지 확인하기위해서 테스트를 진행해봤다.
-src/test/java폴더에 com.simple.basic.mapper패키지를 생성했다.
- MyBatis의 경우 interface와 xml파일은 반드시 이름이 동일해야 한다
com.simple.basic.mapper패키지안에 TestMapper 인터페이스 생성 및 사용할 메서드 생성
public interface TestMapper {
public String getTime();
}
동일한 이름의 xml파일생성
<?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="com.simple.basic.mapper.TestMapper">
<!-- id는 인터페이스의 메서드명 resultType = 반환타입 -->
<select id="getTime" resultType="String">
select now()
</select>
</mapper>
basic폴더에 테스트용 메서드를 호출할 class생성 (JDBCMybatis로 만듬)
클래스에 @RunWith(SpringJUnit4ClassRunner.class) (JUnit으로 테스트환경을 구성하는 용도) 추가
@ContextConfiguration(동작시킬 Spring 설정파일경로) 추가
//JUnit으로 테스트환경을 구성
@RunWith(SpringJUnit4ClassRunner.class)
//동작시킬 Spring 설정파일
@ContextConfiguration("file:src/main/webapp/WEB-INF/config/root-context.xml")
public class JDBCMybatis {
}
테스트할 메서드 생성 전 필요한 객체들 호출
//root-context의 (id가 ds인 hikariDataSource를 연결해둔) sqlSessionFactory Bean 호출
@Autowired
SqlSessionFactoryBean sqlSessionFactory;
//xml파일 연결
@Autowired
TestMapper testMapper;
메서드 생성
@Test//테스트코드로 실행함
public void testCode01() {
//마이바티스 핵심 객체
System.out.println(sqlSessionFactory);
}
//xml파일의 getTime메서드 호츨(TestMapper.xml의 id가 getTime인 select태그 호출)
@Test//테스트코드로 실행함
public void testCode02() {
String time = testMapper.getTime();
System.out.println(time);
}
결과
sqlSessionFactory 와 TestMapper.xml에서 작성한 쿼리문( select now() )
즉 teseCode01과 testCode02 메서드 두개가 순차적으로 동작하는걸 확인할 수 있다.
