본문 바로가기
스터디/Spring

[Spring] Mybatis resultType과 resultMap

by zoodi 2023. 8. 25.
728x90

Mybatis 개념

mybatis-spring은 mybatis에서 mybatis3과 spring 연동 라이브러리로 제공된다. 싱글톤 패턴으로 스프링 빈으로 등록하여 주입하고 쉽게 사용이 가능하다.

 

 

<특징>

mybatis mapper interface를 통해 DB에 접근하다.

객체 프로퍼티로 파라미터와 결과를 객체(dto 등)로 자동 매핑을 지원한다.

스프링 연동 모듈을 제공해주기 때문에 스프링 설정이 간단하다.

트랜잭션을 관리해주기 쉽게 설정이 가능하다.

 

ResultType

- resultType

The fully qualified class name or alias for the expected type that will be returned from this statement. Note that in the case of collections, this should be the type that the collection contains, not the type of the collection itself. Use resultType OR resultMap, not both.

 

  • ibatis에서 resultClass → mybatis에서 resultType으로 바뀌었다.
  • Mybatis 쿼리문 수행 후 메서드 반환 타입이 String이나 객체를 반환 할 수 있도록 지정하는 속성이다.
  • 주로 <select>문에서 사용한다.
  • 작성한 타입에 맞는 자바 클래스에 맵핑이 자동으로 이루어진다.
  • 컬럼 이름과 일치하는 필드에 값이 설정된다.
  • 값 설정은 setter 메소드가 있으면 그것을 통하고 없으면 필드에 직접 맵핑된다.
  • 클래스명 전체 또는 alias를 입력 (즉 맵핑하려는 자바 클래스의 전체 경로를 입력한다.)
  • 따로 설정하지 않아도 select한 결과의 행이 여러개면 List형식으로 반환된다.
  • 예) Project라는 객체로 쿼리 실행 결과값을 받고자 할 경우
<select id="selectTest" resultType="com.test.Project">
...
</select>

 

Mybatis는 컬럼을 아래와 같이 맵핑한다.

 

1.클래스에 setter가 있으면 setter를 호출

2.setter가 없다면 필드 이름으로 맵핑

3.직접 정의한  생성자(모든 필드가있는 생성자 포함) 는 DB 출력 컬럼 순서와 생성자에 정의된 파라미터 순서가 같아야 함

4.기본 생성자 또는 순서를 맞춘 모든 필드가있는 생성자를 반드시 생성해주자

 

mybatis 설정에서 mapUnderscoreToCamelCase를 true로 바꿔주면 snake_case와 camelCase의 자동변환을 해준다.

기본값은 false로 설정되어있다.

  • mybatis-config.xml
<configuration>
	<settings>
		<setting name="mapUnderscoreToCamelCase" value="true" />
	</settings>

...

 

ResultMap

- resultMap

 A named reference to an external resultMap. Result maps are the most powerful feature of MyBatis, and with a good understanding of them, many difficult mapping cases can be solved. Use resultMap OR resultType, not both.

 

  • 사용자가 xml에 정의한 규칙대로 매핑이 이루어진다.
  • <resultMap> 태그를 사용하여 검색 결과와 Java 클래스간의 매핑을 정의할 수 있다.
  • <id> 태그로 식별자 속성을 정의한다.
    • 식별자 속성은 인스턴스를 식별하는데 사용하는 속성을 의미한다.
    • property 속성에 자바의 속성(필드)이름을 지정한다.
    • column 속성에 데이터베이스의 열 이름을 지정한다.
  • <result> 태그로 각 열의 매핑을 정의한다.
    • property와 column 이름을 매핑한다.
  • <resultMap>의 id 속성으로 매핑을 고유하게 식별하는 이름을 정의한다.
    • 이 이름을 <select> 태그의 resultMap 속성에 지정한다.
  • 예)
//property 속성에 자바 클래스의 속성(필드)이름을 지정
<resultMap id="testSnapshot" type="com.test.Project">
	<result column="version" property="version" javaType="java.lang.Integer" />
	<result column="user_id" property="userId" javaType="java.lang.String" />
</resultMap>


//sleect 태그의 resultMap 속성에 지정
<select id="selectTestSnapshot" resultMap="testSnapshot">
	...
</select>

 

참고

https://mybatis.org/mybatis-3/sqlmap-xml.html

https://linked2ev.github.io/mybatis/2019/09/08/MyBatis-1-MyBatis-%EA%B0%9C%EB%85%90-%EB%B0%8F-%EA%B5%AC%EC%A1%B0/

https://araikuma.tistory.com/476

728x90

댓글