생각
관리자 페이지를 구현하는 수업에서 권한을 지정하는 내용을 듣다가 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 |