Mybatis

Mybatis 시작하기

nan2 2022. 1. 10. 11:20
반응형

 

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

 

반응형