MyBatis의 주요 특징 ✨
- 간결한 DB 연동 처리 - 자바 코드 1~2줄로 DB 연동 가능
- SQL과 자바 코드의 분리 - XML 파일로 SQL 분리
- 결합도 감소 ⬇️
- 응집도 증가 ⬆️
- 유지보수성 향상 🔧
MyBatis 구현 단계 📝
1. 의존성 추가 📦
Maven pom.xml 또는 Gradle build.gradle 파일에 MyBatis 의존성을 추가합니다.
2. Mapper XML 파일 생성 📄
- SQL 명령어에 고유 ID 부여 방식으로 설정
- DAO에 작성된 SQL 분리
- XML 태그(엘리먼트)를 사용하여 SQL 관리
- 자바 코드는 소문자, SQL은 대문자 사용 권장
<mapper namespace="com.example.mapper.BoardMapper">
<insert id="insert">
INSERT INTO BOARD VALUES (NVL((SELECT MAX(BID)+1 FROM BOARD),1001),#{title}, #{content}, #{writer}, 0)
</insert>
<select id="selectAll" resultType="board">
SELECT * FROM BOARD ORDER BY BID DESC
</select>
<select id="selectOne" resultType="board">
SELECT * FROM BOARD WHERE BID=#{bid}
</select>
<update id="update">
UPDATE BOARD SET TITLE=#{title}, CONTENT=#{content} WHERE BID=#{bid}
</update>
<delete id="delete">
DELETE FROM BOARD WHERE BID=#{bid}
</delete>
</mapper>
3. MyBatis 설정 파일(config.xml) 생성 ⚙️
- DBMS 연결 설정 (Spring에서는 applicationContext.xml에 포함)
- Mapper XML 파일 위치 지정
- TypeAlias 설정
- 트랜잭션 관리 설정
<?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>
<!-- 타입 별칭 설정 -->
<typeAliases>
<typeAlias type="com.example.model.Board" alias="board"/>
</typeAliases>
<!-- 매퍼 파일 위치 설정 -->
<mappers>
<mapper resource="mappers/BoardMapper.xml"/>
</mappers>
</configuration>
4. Spring 연동 설정 🔄
applicationContext.xml에 MyBatis 관련 빈 등록:
<!-- DataSource 설정 -->
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
<property name="username" value="system"/>
<property name="password" value="1234"/>
</bean>
<!-- SqlSessionFactory 설정 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
<!-- SqlSessionTemplate 설정 -->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="sqlSessionFactory"/>
</bean>
<!-- DAO 빈 등록 -->
<bean id="boardDAO" class="com.example.dao.BoardDAOImpl">
<property name="sqlSession" ref="sqlSession"/>
</bean>
<!-- Service 빈 등록 및 DI -->
<bean id="boardService" class="com.example.service.BoardServiceImpl">
<property name="boardDAO" ref="boardDAO"/>
</bean>
MyBatis의 추가 기능 🌟
- 동적 SQL - 조건에 따라 SQL 구문 변경 가능
- ResultMap - 복잡한 객체 매핑 처리
- 캐싱 - 성능 향상을 위한 1차/2차 캐시 제공
- 배치 처리 - 대량 데이터 처리 지원
MyBatis vs JPA 비교 🔍
| 특징 | MyBatis | JPA |
| SQL 제어 | 개발자가 직접 SQL 작성 | 자동 생성 |
| 학습 곡선 | 상대적으론 낮음 | 높음 |
| 성능 튜닝 | 세밀한 SQL 튜닝 가능 | 제한적 |
| 객체지향성 | 중간 | 높음 |
실무 활용 팁 💡
- XML 파일 구조화 - 기능별로 매퍼 분리
- 동적 SQL 활용 - 검색 조건에 따른 쿼리 최적화
- TypeHandler 사용 - 복잡한 데이터 타입 변환 처리
- 로깅 설정 - SQL 실행 과정 모니터링
'Back-End' 카테고리의 다른 글
| [Java] JPA 영속성 (1) | 2025.05.23 |
|---|---|
| [DDD] 도메인 주도 설계 애그리거트 (0) | 2025.05.22 |
| [Spring] 어노테이션 세부사항 정리 (1) | 2025.04.24 |
| [Spring] AOP (1) | 2025.04.23 |
| [Spring] 빈 생명주기 (1) | 2025.04.22 |