🥑

초보 개발자의 일상

개발/SpringBoot

[MyBatis] <resultMap>, <id>, <result>, <collection>

dev.jelee 2024. 10. 28. 01:57

생각

관리자 페이지를 구현하는 수업에서 권한을 지정하는 내용을 듣다가 user와 role을 따로 테이블을 만든 다음 MyBatis에서 연결을하는데 resultMap이라는 요소를 사용하고 이 요소 안에 <id>, <result>, <collection>을 사용하는 것을 보고 정리해두면 좋을 거 같아서 글로 남긴다.

 

예시

// 예시
<resultMap id="UserWithRoles" type="kr.co.cofile.sbbsecurity.test.User">
    <id property="id" column="user_id"/>
    <result property="username" column="username" />	
    <result property="password" column="password" />	
    <result property="enabled" column="enabled" />
    <collection property="roles" ofType="kr.co.cofile.sbbsecurity.test.Role">
        <id property="id" column="role_id"/>
        <result property="name" column="role_name"/>
    </collection>
</resultMap>

<select id="selectUser" resultMap="UserWithRoles">
    SELECT * FROM users WHERE id = #{id}
</select>

 

<select> 요소에서 resultMap 속성을 사용하는 이유

  • <select> 요소에서 resultMap 속성을 사용하는 이유는 SQL 쿼리 결과를 Java 객체에 매핑할 때 보다 명확하고 유연한 방식으로 복잡한 데이터 구조를 관리하기 위해서다.
  • 부모-자식 관계, 다대다 관계 등 복잡한 객체 구조를 쉽게 표현할 수 있다. 예를 들어, 하나의 User 객체가 여러 Role 객체를 가질 때, 이를 resultMap을 통해 쉽게 매핑할 수 있다.

 

<resultMap> 요소 안에 <id>와 <result> 요소를 사용하는 이유

  • MyBatis의 <resultMap>에서 <id> 요소와 <result> 요소의 사용 차이는 주로 매핑되는 속성의 유형과 역할에 따라 달라집니다.
  • <id> 요소: 주로 테이블의 기본 키를 매핑할 때 사용된다. 기본 키는 일반적으로 데이터베이스에서 레코드를 고유하게 식별하는 데 사용된다.
  • <result> 요소: 기본 키가 아닌 일반 컬럼을 매핑할 때 사용된다. 즉, 주로 데이터베이스의 일반 속성들을 매핑할 때 쓰인다.
  • 요약
    • 기본 키: <id> 요소를 사용하여 매핑 (예: user_id).
    • 일반 속성: <result> 요소를 사용하여 매핑 (예: username, password, enabled).

 

property와 column

  • property: 매핑할 Java 객체의 필드명을 말한다. SQL 쿼리 결과를 매핑할 때 사용될 객체의 속성을 의미.
  • column: 데이터베이스의 컬럼의 타이틀을 말한다. SQL 쿼리에서 선택한 결과에서 어떤 컬럼이 객체의 어떤 필드의 매핑될지를 지정한다.

 

<collection>을 사용하는 이유는?

  • MyBatis의 <collection> 요소는 주로 한 객체가 여러 개의 자식 객체(또는 관련된 객체)를 가질 때 사용된다.
  • 예를 들어, User 객체가 여러 개의 Role 객체를 가질 수 있는 경우에 적합하다.
  • 이 요소를 사용하면 데이터베이스에서 가져온 관련 데이터(예: 사용자의 역할 목록)를 Java 객체의 리스트로 매핑할 수 있다.

 

 

'개발 > SpringBoot' 카테고리의 다른 글

@ModelAttribute  (1) 2024.10.28
@RequestParm  (0) 2024.10.28
[MyBatis] useGeneratedKeys, keyProperty  (1) 2024.10.28
@Autowired  (0) 2024.10.23
Spring Bean (스프링 빈)  (0) 2024.10.23