JDBC의 불편함
JDBC(Java Database Connectivity)는 데이터베이스와 자바 애플리케이션 간의 상호작용을 가능하게 해주는 API입니다. 하지만, JDBC를 사용할 때 여러 불편함이 존재합니다:
- 저수준 API: JDBC는 프로그래머가 낮은 수준부터 ORM(Object-Relational Mapping)을 작성해야 하는 장점이 있지만, 그로 인해 많은 코드가 반복되는 단점이 있습니다.
- 반복적인 코드: 데이터베이스 연결, 쿼리 실행, 결과 처리 등에서 많은 중복 코드가 발생하여 유지보수가 어렵습니다.
Persistence Framework란?
Persistence Framework는 애플리케이션 데이터와 데이터 저장소 간의 상호작용을 관리하는 소프트웨어 라이브러리입니다. 이 프레임워크는 데이터베이스와의 상호작용을 추상화하여 개발자가 더 쉽게 작업할 수 있도록 도와줍니다.
MyBatis 소개
MyBatis는 자바에서 SQL Mapper를 지원하는 프레임워크로, 개발자가 지정한 SQL과 고급 매핑을 지원합니다. MyBatis는 JDBC로 작성되어 있으며, 반복되는 코드를 줄이고, SQL 쿼리를 XML 파일에 저장하여 관리하는 방식으로 개발자의 편의를 제공합니다.
MyBatis 아키텍처
MyBatis의 아키텍처는 다음과 같이 구성됩니다:
- SqlSessionFactoryBuilder: 설정 파일을 읽고 SqlSessionFactory를 생성합니다.
- SqlSessionFactory: SqlSession을 생성하며, 세션을 관리합니다.
- SqlSession: 개발자가 작성한 SQL 문을 호출하고 결과를 반환합니다.
MyBatis 설정
MyBatis는 XML 파일로 설정을 관리합니다. 기본적인 MyBatis 설정 파일은 다음과 같이 작성합니다:
<?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>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
<property name="username" value="HR"/>
<property name="password" value="HR"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mybatis/mapper/FreeBoard.xml"/>
</mappers>
</configuration>
이 설정 파일에서는 데이터베이스 연결 정보와 매퍼 파일의 위치를 정의합니다.
MyBatis를 이용한 CRUD 작업
- SqlSessionFactory 생성: 아래의
MybatisUtil
클래스를 통해 SqlSessionFactory를 생성합니다.
public class MybatisUtil {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
String resource = "mybatis/config/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (Exception e) {
e.printStackTrace();
}
}
public static SqlSessionFactory getSqlSessionFactory() {
return sqlSessionFactory;
}
}
- Mapper 인터페이스 생성: MyBatis는 XML을 호출하기 위해 인터페이스를 필요로 합니다.
public interface FreeBoard {
public String now();
// ... 추가 메서드 정의
}
- Mapper 구현체 생성: XML 파일에서 실제 SQL 쿼리를 정의합니다.
<mapper namespace="com.example.mapper.FreeBoard">
<select id="now" resultType="java.lang.String">
SELECT SYSDATE FROM dual
</select>
</mapper>
- 서비스 영역에서 호출: 서비스 클래스에서 SQL 세션을 통해 Mapper를 호출합니다.
try (SqlSession sqlSession = MybatisUtil.getSqlSessionFactory().openSession(true)) {
FreeBoard board = sqlSession.getMapper(FreeBoard.class);
String now = board.now();
System.out.println(now);
} catch (Exception e) {
e.printStackTrace();
}
MyBatis의 다양한 문법
MyBatis는 다양한 SQL 매핑을 지원하며, 다음과 같은 기능을 제공합니다:
- namespace: 인터페이스 전체 경로를 작성
- Select 태그: SQL 쿼리의
id
,parameterType
,resultType
등을 정의 - Insert, Update, Delete 태그: CRUD 작업을 위한 정의
- 동적 쿼리 지원:
if
,choose
,foreach
와 같은 조건부 쿼리 작성 - 데이터 바인딩: VO 클래스 자동 매핑, HashMap 자동 매핑,
@Param
사용
MyBatis는 JDBC의 불편함을 해결하고, SQL 쿼리를 XML 파일에 작성하여 관리함으로써 코드의 가독성과 유지보수성을 높여주는 강력한 프레임워크입니다.
MyBatis를 활용하면 데이터베이스와의 상호작용을 더욱 효율적으로 처리할 수 있으며, 개발자는 비즈니스 로직에 집중할 수 있습니다.
이 포스팅을 통해 MyBatis의 기본적인 개념과 설정 방법을 이해하고, 실제 프로젝트에 적용해 보시기 바랍니다!
'🗄️ Backend > JSP' 카테고리의 다른 글
JSP와 MVC2 패턴 (1) | 2024.10.18 |
---|---|
JSP와 MVC 패턴: DAO/DTO, 커넥션 풀, EL, JSTL (1) | 2024.10.18 |
쿠키(Cookie)와 세션(Session) 완벽 가이드 (0) | 2024.10.18 |
JSP와 서블릿: 동적 웹 개발의 기초 (0) | 2024.10.18 |
HTML 기초 및 태그 정리 (2) | 2024.10.17 |