Backend/JDBC
[JDBC] MyBatis 환경설정 및 주요 컴포넌트(Component)
Gaejirang-e
2023. 5. 6. 19:18

𐂂 ORM (Object Relation Mapping) framework, MyBatis
DAO -(위임)-> Mybatis -(조작)-> JDBC API
(org.apache.ibatis 패키지에서 MyBatis framework 라이브러리 제공)
⚠️ 위임할 때 parameter와 result만 결정해주면 알아서 조작해준다.
⚠️ 내부구조가 PreparedStatement로 동작
🎯 목적:
- JDBC 코드 및 매개변수의 중복작업을 제거
- 자바 코드와 SQL 쿼리의 분리로 간결화
- 복잡한 쿼리 작성 가능
- join 결과에 대한 쉬운 객체 바인딩
(org.apache.ibatis 패키지에서 MyBatis framework 라이브러리 제공)
⚠️ 위임할 때 parameter와 result만 결정해주면 알아서 조작해준다.
⚠️ 내부구조가 PreparedStatement로 동작
🎯 목적:
- JDBC 코드 및 매개변수의 중복작업을 제거
- 자바 코드와 SQL 쿼리의 분리로 간결화
- 복잡한 쿼리 작성 가능
- join 결과에 대한 쉬운 객체 바인딩
📜 mybatis.xml
MyBatis 환경설정 문서
<configuration>
<!-- DB정보를 담고있는 외부 properties파일 위치 지정 -->
<properties resource="dbInfo.properties" />
<!-- 값이 전달되지 않으면 NULL로 들어갈 수 있도록 설정 -->
<settings>
<setting name="jdbcTypeForNull" value = "NULL" />
</settings>
<!-- 객체에 별칭만들기 -->
<typeAliases>
<typeAlias type="app.dto.Cust" alias="cust" /><!-- 클래스 경로를 cust로 간단하게 사용 -->
</typeAliases>
<!-- DBCP -->
<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>
<!-- 쿼리 작성 문서(mapper문서) 위치 지정(등록) -->
<mappers>
<mapper resource="custmapper.xml"/>
</mappers>
</configuration>
📜 dbInfo.properties
url=jdbc:mysql://localhost:3306/shopdb?useUnicode=true&characterEncoding=UTF8&serverTimezone=Asia/Seoul
user=woo
password=123456
𖠃 MyBatis 주요 컴포넌트
⚒️ SqlSessionFactoryBuilder
(scope: method variable)
: SqlSessionFactory를 세우는 역할
🏭 SqlSessionFactory
(scope: Application)
: 필요할 때마다 SqlSession을 생성해주는 역할, static singleton pattern
☄️ SqlSession
(scope: method variable)
: JDBC의 connection과 동일, Not to be shared, closing*
⚠️ MyBatis는 auto commit*이 아니다.
(scope: method variable)
: SqlSessionFactory를 세우는 역할
🏭 SqlSessionFactory
(scope: Application)
: 필요할 때마다 SqlSession을 생성해주는 역할, static singleton pattern
☄️ SqlSession
(scope: method variable)
: JDBC의 connection과 동일, Not to be shared, closing*
⚠️ MyBatis는 auto commit*이 아니다.