마이바티스는,
개발자가 지정한 sql, 저장 프로시서 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크다.
마이바티시는 JDBC로 처리하는 상당부분의 코드와 파라미터 설정및 결과 매핑을 대신해준다.
마이바티스는 데이터 베이스 레코드에 원시타입과 map인터페이스 그리고 자바 POJO를 설정해서 매핑하기 위해 xml과 애노테이션을 사용할 수 있다.
시작하기
>설치하기
마이바티스를 사용하기위해 mybatis-x.x.x.jar파일을 클래스패스에 두어야한다.
메이븐을 사용한다면 pom.wml에 다음의 설정을 추가하자.
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>x.x.x</version>
</dependency>
>xml에서 SqlSessionFactory 빌드하기
모든 마이바티스 애플리케이션은 SqlSessionFactory 인스턴스를 사용한다.
SqlSessionFactory인스턴스는 SqlSessionFactoryBuilder를 사용하여 만들수 있다.
SqlSessionFactoryBuilder는 XML설정파일에서 SqlSessionFactory인스턴스를 빌드할 수 있다.
XML파일에서 SqlSessionFactory인스턴스를 빌드하는 것은 매우 간단한다.
설정을 위해 클래스패스 자원을 사용하는 것을 추천하나 파일 경로나 file:// URL로부터 만들어진 InputStream인스턴스를 사용할 수도 있다.
마이바티스는 클래스패스와 다른 위치에서 자원을 로드하는 것으로 좀더 쉽게 해주는 Resources 라는 유틸성 클래스를 가지고 있다.
String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
자세히 살펴보기.
>매핑된 SQL구문 살펴 보기
매핑된 SQL구문에 대한 내용이 가장 중요하다.
두가지 예제로 살펴보자.
1.
구문은 xml이나 어노테이션을 사용해서 정의할 수 있다.
마이바티스가 제공하는 대부분의 기능은 xml을 통해 매핑 기법을 사용한다. SqlSession을 호출하는 xml기반의 매핑구문이다.
예제1.
<?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="org.mybatis.example.BlogMapper">
<select id="selectBlog" resultType="Blog">
select * from Blog where id = #{id}
</select>
</mapper>
한개의 매퍼 xml파일에는 많은 수의 매핑 구문을 정의할수 있다.
org.mybatis.example.BlogMapper 네임스페이스에서 selectBlog라는 매핑 구문을 정의했고 이는 결과적으로 org.mybatis.example.BlogMapper.selectBlog형태로 실제 명시되게 된다. 그래서 다음처럼 사용하게 되는 셈이다.
Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);
마치 패키지를 포함한 전체 경로의 클래스내 메소드를 호출하는 것과 비슷한 형태이다.
이 이름은 매핑된 select구문의 이름과 파라미터 그리고 리턴타입을 가진 네임스페이스와 같은 이름의 Mapper클래스와 직접 매핑될수 있다.
이는 Mapper인터페이스의 메소드를 간단히 호출하도록 허용한다.
2.
위의 내용과 대응된다.
BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);
두번째 방법은 많은 장점을 가진다. 먼저 문자열에 의존하지 않는다는 것이다. 이는 애플리케이션을 좀더 안전하게 만든다. 두번째는 개발자가 IDE를 사용할 때 매핑된 SQL구문을 사용할때의 수고를 덜어준다.
참고한 글
'개발공부 > Spring' 카테고리의 다른 글
[스프링] Mybatis Mapper 관련 링크 공유 (0) | 2021.02.26 |
---|---|
[스프링] 어노테이션 @RequestMapping @ReqeustBody @ResponseBody (0) | 2021.02.22 |
의존성 주입(Dependency Injection, DI) (0) | 2021.01.03 |
Mybatis(2) (1) | 2021.01.02 |
Mybatis 동적 쿼리(1) (0) | 2020.12.31 |
댓글