1. pom.xml 파일에 mybatis 라이브러리를 추가
<dependency>
<groupId> org.mybatis </groupId>
<artifactId> mybatis </artifactId>
<버전> xxx </version>
</dependency>
2. XML에서 SqlSessionFactory를 빌드
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
// JDBC 연결과 관련된 설정
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
// SQL 코드와 매핑에 대한 정의를 가지는 Mapper 관련된 설정
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
SqlSessionFactory란?
mybatis를 이용하여 SqlSession을 열거나 쿼리를 실행할 때 SqlSessionFactory를 사용한다.
SqlSessionFactory는 Mybatis 설정파일(xml)과 SqlSessionFactoryBuilder 로 인스턴스를 생성한다.
Mybatis 설정파일이란?
JDBC 연결과 관련된 설정 & SQL 코드와 매핑을 정의한 Mapper 에 대한 설정을 해준다.
3. SqlSessionFactory에서 SqlSession 가져오기
SqlSession이란?
SqlSessionFactory 인스턴스가 생성되면 SqlSession의 인스턴스를 얻을 수 있다.
SqlSession에는 DB에 대해 Sql 명령을 실행하기 위한 모든 메서드가 들어있다.
- SqlSession에 직접 매핑하여 쿼리를 사용할 수 있음
try (SqlSession session = sqlSessionFactory.openSession()) {
Blog blog = session.selectOne(
"org.mybatis.example.BlogMapper.selectBlog", 101);
}
- 주어진 명령문에 대한 매개변수와 반환 값을 정의한 인터페이스를 사용하면 문자열 오류 발생이 적어짐
try (SqlSession session = sqlSessionFactory.openSession()) {
BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);
}
4. 매핑된 SQL구문 확인
SQL 구문 & 매핑에 대한 정의를 하는 방법은 2가지이다.
(1) 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">
// 네임스페이스로 Java 클래스에서 호출 및 애노테이션 Mapper 인터페이스와 매핑
<mapper namespace="org.mybatis.example.BlogMapper">
// SQL구문의 id, parameterType, resultType 설정
<select id="selectBlog" parameterType="String" resultType="Blog">
select * from Blog where id = #{id}
</select>
</mapper>
(2) 애노테이션
package org.mybatis.example;
public interface BlogMapper {
@Select("SELECT * FROM blog WHERE id = #{id}")
Blog selectBlog(int id);
}
≫ 복잡한 쿼리를 실행해야 하는 경우 xml 파일의 매핑문을 사용하는 것이 더 좋다.
5. Scope와 LifeTime
- SqlSessionFactoryBuilder: SqlSessionFactory 인스턴스를 생성한 후에는 유지할 필요가 없기 때문에 로컬 메서드 Scope
- SqlSessionFactory: 인스턴스가 생성되면 애플리케이션 실행 기간 동안은 존재해야 하기 때문에 애플리케이션 Scope (싱글톤 패턴이나 static 싱글톤 패턴)
- SqlSession: 각 스레드에는 자체 SqlSession 인스턴스가 존재해야 한다. SqlSession 는 공유되지 않기 때문에 요청 또는 메서드 Scope
https://mybatis.org/mybatis-3/getting-started.html
'Mybatis' 카테고리의 다른 글
There is no getter for property named 'recordsPerPage' in 'class com.reviewer.portfolio.vo.paging.Criteria' 에러 해결 방법 (0) | 2022.03.24 |
---|---|
Mybatis에서 <![CDATA[ ]]> 사용하는 이유 (0) | 2022.02.21 |
<foreach> 문에 대하여 (0) | 2021.12.21 |