스프링과 MyBatis: 초보자를 위한 더 쉬운 설명과 자세한 주석
왜 스프링과 MyBatis를 함께 사용할까요?
- 스프링: 자바 개발을 편리하게 해주는 종합적인 프레임워크입니다. 여러 기능들을 통합하고 관리해주어 개발자가 코딩에 집중할 수 있도록 도와줍니다.
- MyBatis: 데이터베이스와 자바 객체 사이를 매핑하여 SQL 쿼리를 더 쉽게 작성하고 관리할 수 있도록 해주는 프레임워크입니다.
스프링과 MyBatis를 함께 사용하면 데이터베이스와의 연결, SQL 쿼리 실행, 결과 처리 등을 더욱 효율적으로 관리할 수 있습니다.
간단한 예제: 사용자 정보 조회하기
// UserMapper.java
public interface UserMapper {
// 사용자 정보를 조회하는 메서드
// @Param 어노테이션을 사용하여 파라미터를 지정
User selectUserById(@Param("userId") int userId);
}
// UserMapper.xml
<mapper namespace="com.example.UserMapper">
<select id="selectUserById" resultType="com.example.User">
SELECT * FROM users WHERE user_id = #{userId}
</select>
</mapper>
// UserService.java
@Service
public class UserService {
@Autowired
private SqlSessionTemplate sqlSessionTemplate;
public User getUserById(int userId) {
// Mapper 인터페이스를 통해 SQL 실행
return sqlSessionTemplate.getMapper(UserMapper.class).selectUserById(userId);
}
}
코드 설명
- UserMapper.java:
- selectUserById 메서드: 사용자 ID를 받아 해당 사용자 정보를 조회하는 메서드입니다.
- @Param 어노테이션: SQL에서 파라미터를 사용할 때 파라미터 이름을 지정합니다.
- UserMapper.xml:
- namespace: Mapper 인터페이스의 패키지 경로를 지정합니다.
- select: SELECT 쿼리를 작성하고, resultType으로 결과를 매핑할 Java 객체를 지정합니다.
- #{userId}: @Param으로 지정한 파라미터를 SQL에서 사용합니다.
- UserService.java:
- SqlSessionTemplate: MyBatis와 스프링을 연결해주는 템플릿입니다.
- getUserById 메서드: SqlSessionTemplate을 이용하여 UserMapper 인터페이스의 메서드를 호출하고, 결과를 반환합니다.
더 쉽게 이해하기 위한 비유
- UserMapper.java: 레스토랑 메뉴판과 같습니다. 어떤 음식을 주문할 수 있는지 정의되어 있습니다.
- UserMapper.xml: 요리 레시피와 같습니다. 메뉴판에 있는 음식을 어떻게 만들지 자세한 방법이 적혀 있습니다.
- UserService.java: 웨이터와 같습니다. 손님의 주문을 받아 주방(데이터베이스)에 전달하고, 요리된 음식(결과)을 손님에게 가져다줍니다.
주요 개념 정리
- Mapper 인터페이스: SQL 쿼리를 메서드 형태로 정의합니다.
- Mapper XML: 실제 SQL 쿼리를 작성하는 파일입니다.
- SqlSessionTemplate: MyBatis와 스프링을 연결하고, SQL 실행을 담당합니다.
좀 더 복잡한 기능을 구현하려면?
- Dynamic SQL: 조건에 따라 SQL 쿼리를 동적으로 생성할 수 있습니다.
- ResultMap: 복잡한 결과를 Java 객체에 매핑할 수 있습니다.
- Cache: 쿼리 결과를 캐시하여 성능을 향상시킬 수 있습니다
마치 도서관에서 책 찾는 것과 같아요!1. UserMapper (사서 선생님):
- UserMapper는 마치 도서관 사서 선생님과 같아요. 우리가 원하는 정보(사용자 정보)를 찾아주는 역할을 하죠.
- selectUserById라는 메서드는 "사용자 ID를 가지고 사용자 정보를 찾아줘"라는 명령어예요. 마치 "이 책을 찾아주세요"라고 말하는 것과 같아요.
2. UserMapper.xml (도서관 목록):
- UserMapper.xml은 도서관의 책 목록과 같아요. 어떤 책이 어디에 있는지 정확하게 기록되어 있죠.
- **SELECT * FROM users WHERE user_id = #{userId}**는 "users라는 책 목록에서 user_id가 #{userId}인 책을 찾아"라는 뜻이에요. 마치 "컴퓨터 과학 책을 찾아주세요"라고 말하는 것과 같아요.
3. UserService (도서관 이용자):
- UserService는 도서관을 이용하는 우리와 같아요.
- getUserById라는 메서드는 "UserMapper에게 사용자 정보를 요청해"라는 명령어예요. 마치 "사서 선생님, 이 책 좀 찾아주세요"라고 말하는 것과 같아요.
전체 과정 요약:
- **우리(UserService)**가 **사서 선생님(UserMapper)**에게 "사용자 정보를 찾아달라"고 부탁해요.
- **사서 선생님(UserMapper)**은 **도서관 목록(UserMapper.xml)**을 보고 정확한 책(사용자 정보)을 찾아 우리에게 가져다줘요.
결론적으로:
- 위 코드는 컴퓨터 프로그램이 마치 도서관처럼 작동하여 우리가 원하는 정보(사용자 정보)를 찾아주는 과정을 보여주는 거예요.
- 우리가 도서관에서 특정 책을 찾고 싶을 때, 도서관 사서 선생님께 책 제목이나 작가 이름을 알려주면 그 책을 찾아다 주시죠? 컴퓨터 프로그램에서도 이와 비슷한 일이 일어나요.