MyBatis - SqlSession

2024. 12. 16. 19:00·Spring

https://mybatis.org/mybatis-3/ko/getting-started.html

 

마이바티스 3 | 시작하기 – mybatis

 

mybatis.org

 

1. SqlSession이란?

  • SqlSession은 MyBatis의 핵심 객체, 데이터베이스 작업(SQL 실행, 트랜잭셩 관리 등)을 담당
  • 역할 :
    • SQL 실행 : select, insert, update, delete 쿼리를 실행
    • 트랜잭션 관리 : 데이터베이스 작업의 시작과 종료를 관리함.
    • 매핑 작업 : SQL 결과를 자바 객체로 매핑함.

2. SqlSession 사용 흐름

graph TD
    A[SqlSessionFactory 생성] --> B[SqlSession 생성]
    B --> C[SQL 실행]
    C --> D[결과 매핑]
    D --> E[트랜잭션 처리]
    E --> F[SqlSession 종료]

  1. SqlSessionFactory 생성:
    • SqlSession 객체를 생성하기 위한 팩토리 클래스.
    • MyBatis 설정 파일과 데이터 소스를 기반으로 초기화.
  2. SqlSession 생성:
    • openSession() 메서드로 SqlSession 객체를 생성.
  3. SQL 실행:
    • SQL ID와 파라미터를 전달하여 쿼리 실행.
  4. 결과 매핑:
    • SQL 결과를 자바 객체로 매핑.
  5. 트랜잭션 처리:
    • commit() 또는 rollback() 메서드로 트랜잭션을 처리.
  6. SqlSession 종료:
    • 사용 후 반드시 close()로 종료.

3. SqlSessionFactory

3.1 역할

  • SqlSession 객체를 생성하는 팩토리 클래스.
  • MyBatis 설정 파일(mybatis-config.xml)과 데이터 소스를 기반으로 구성

3.2 생성 방법

  1. 직접 생성 :
    • SqlSessionFactoryBuilder를 사용하여 MyBatis 설정 파일에서 생성.

3.2 생성 방법

  1. 직접 생성:
    • SqlSessionFactoryBuilder를 사용하여 MyBatis 설정 파일에서 생성.
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

  1. Spring에서 생성:
    • Spring Boot에서는 SqlSessionFactoryBean을 통해 자동으로 생성.

4. SqlSession 주요 메서드

4.1 SQL 실행 관련 메서드

메서드 설명
selectOne(String statement) 단일 행 결과 조회.
selectList(String statement) 다중 행 결과를 리스트로 반환.
insert(String statement) 데이터 삽입.
update(String statement) 데이터 업데이트.
delete(String statement) 데이터 삭제.
try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
    User user = sqlSession.selectOne("com.example.mapper.UserMapper.findUserById", 1);
    System.out.println(user.getName());
}


4.2 트랜잭션 관련 메서드

메서드 설명
commit() 트랜잭션 커밋.
rollback() 트랜잭션 롤백.
close() SqlSession을 닫아 자원을 해제.
try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
    sqlSession.update("com.example.mapper.UserMapper.updateUser", user);
    sqlSession.commit(); // 변경 사항 저장
}

 


4.3 Mapper 인터페이스 사용

  • SqlSession의 getMapper() 메서드를 통해 Mapper 인터페이스를 쉽게 호출할 수 있습니다.
try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    User user = mapper.findUserById(1);
    System.out.println(user.getName());
}


5. Spring과 SqlSession

5.1 SqlSessionFactoryBean

  • Spring 환경에서는 SqlSessionFactoryBean을 사용해 SqlSessionFactory를 생성합니다.
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
    SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
    factoryBean.setDataSource(dataSource);
    factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mappers/*.xml"));
    return factoryBean.getObject();
}


5.2 MyBatis와 Spring 통합 방식

  1. 자동 Mapper 등록:
    • @MapperScan을 통해 Mapper 인터페이스를 스캔하고 SqlSession과 연결.
@MapperScan("com.example.mapper")
@SpringBootApplication
public class MyBatisApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyBatisApplication.class, args);
    }
}

  1. SqlSession 직접 사용:
    • SqlSessionFactory를 주입받아 SqlSession을 직접 생성하고 사용.
@Service
public class UserService {
    private final SqlSessionFactory sqlSessionFactory;

    @Autowired
    public UserService(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }

    public User getUserById(int id) {
        try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
            return sqlSession.selectOne("com.example.mapper.UserMapper.findUserById", id);
        }
    }
}


6. SqlSession 이해하기

6.1 SqlSession의 역할

  • 데이터베이스 작업의 중간 관리자:
    • 개발자가 SQL을 실행하고 결과를 처리할 수 있도록 환경을 제공합니다.
  • 짧은 생명주기:
    • 각 작업마다 새롭게 생성되며, 사용 후 즉시 종료해야 합니다.

6.2 SqlSessionFactory와 SqlSession의 관계

  • SqlSessionFactory는 공장:
    • 애플리케이션 전체에서 공유되며, SqlSession을 생성하는 역할을 합니다.
  • SqlSession은 공장에서 나오는 제품:
    • 하나의 데이터베이스 작업을 처리한 후 폐기됩니다.

6.3 트랜잭션 처리

  • SqlSession은 작업 단위(Unit of Work)를 관리합니다.
  • 트랜잭션 커밋 또는 롤백을 통해 데이터 무결성을 보장합니다.


7. SqlSession과 관련된 주요 클래스 및 용어

클래스/용어 설명
SqlSession SQL 실행, 결과 매핑, 트랜잭션 관리 담당.
SqlSessionFactory SqlSession을 생성하는 팩토리 클래스.
SqlSessionFactoryBean Spring에서 SqlSessionFactory를 생성하기 위한 설정 클래스.
Mapper 인터페이스 SQL과 자바 메서드 간의 연결 인터페이스.
Mapper XML SQL 쿼리를 정의하는 XML 파일.

8. 학습 포인트 요약

  1. SqlSession의 역할:
    • SQL 실행 및 트랜잭션 관리.
  2. SqlSessionFactory와의 관계:
    • SqlSession은 팩토리(SqlSessionFactory)에서 생성됨.
  3. Spring 통합:
    • Spring Boot에서는 SqlSessionFactoryBean을 통해 자동으로 설정 가능.
  4. 트랜잭션 관리:
    • commit(), rollback() 메서드로 작업의 무결성 보장.
  5. Mapper 인터페이스 사용:
    • SQL 호출을 간소화하며, 스프링과의 통합을 통해 더욱 효율적인 작업 가능.

'Spring' 카테고리의 다른 글

Spring Web - Controller와 RestController  (0) 2024.12.18
Spring Boot - Spring Web  (0) 2024.12.18
MyBatis - Mapper XML  (1) 2024.12.15
MyBatis 개요  (1) 2024.12.15
RowMapper와 BeanPropertyRowMapper  (1) 2024.12.15
'Spring' 카테고리의 다른 글
  • Spring Web - Controller와 RestController
  • Spring Boot - Spring Web
  • MyBatis - Mapper XML
  • MyBatis 개요
jhyngu
jhyngu
취업하자.
    티스토리 홈
    |
  • jhyngu
    jhyngu
    jhyngu
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • Dev (151)
      • Java (2)
      • Spring (51)
      • Spring Security (39)
        • JWT (22)
        • OAuth2 (17)
      • Kotlin (2)
      • React (6)
      • Coding Test (28)
      • DB (0)
      • Git (5)
      • Linux (14)
      • docker (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    OAuth2
    Spring Boot
    oauth2
    react
    api client
    Spring
    JDBC
    git
    JWT
    Spring Framework
    JavaScript
    MVC
    Linux
    Spring Security
    MariaDB
    백준
    Postman
    알고리즘
    mybatis
    spring web
  • hELLO· Designed By정상우.v4.10.3
jhyngu
MyBatis - SqlSession
상단으로

티스토리툴바