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 종료]
- SqlSessionFactory 생성:
- SqlSession 객체를 생성하기 위한 팩토리 클래스.
- MyBatis 설정 파일과 데이터 소스를 기반으로 초기화.
- SqlSession 생성:
- openSession() 메서드로 SqlSession 객체를 생성.
- SQL 실행:
- SQL ID와 파라미터를 전달하여 쿼리 실행.
- 결과 매핑:
- SQL 결과를 자바 객체로 매핑.
- 트랜잭션 처리:
- commit() 또는 rollback() 메서드로 트랜잭션을 처리.
- SqlSession 종료:
- 사용 후 반드시 close()로 종료.
3. SqlSessionFactory
3.1 역할
- SqlSession 객체를 생성하는 팩토리 클래스.
- MyBatis 설정 파일(mybatis-config.xml)과 데이터 소스를 기반으로 구성
3.2 생성 방법
- 직접 생성 :
- SqlSessionFactoryBuilder를 사용하여 MyBatis 설정 파일에서 생성.
3.2 생성 방법
- 직접 생성:
- 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);
- 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 통합 방식
- 자동 Mapper 등록:
- @MapperScan을 통해 Mapper 인터페이스를 스캔하고 SqlSession과 연결.
@MapperScan("com.example.mapper")
@SpringBootApplication
public class MyBatisApplication {
public static void main(String[] args) {
SpringApplication.run(MyBatisApplication.class, args);
}
}
- 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. 학습 포인트 요약
- SqlSession의 역할:
- SQL 실행 및 트랜잭션 관리.
- SqlSessionFactory와의 관계:
- SqlSession은 팩토리(SqlSessionFactory)에서 생성됨.
- Spring 통합:
- Spring Boot에서는 SqlSessionFactoryBean을 통해 자동으로 설정 가능.
- 트랜잭션 관리:
- commit(), rollback() 메서드로 작업의 무결성 보장.
- 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 개요 (0) | 2024.12.15 |
RowMapper와 BeanPropertyRowMapper (1) | 2024.12.15 |