프로그래밍/스프링 MVC | 2014. 1. 22. 18:46
* id , result
<id property ="id" column="post_id" />
<result property="subject" column="post_subject" />
>> 결과 매핑의 기본적인 형태, id와 result 모두 한개의 칼럼을 한개의 프로퍼티나 간단한 데이터 타입의 필드에 매핑한다.
* constructor
<constructor>
<idArg column="id" javaType="int"/>
<arg column="username" javaType="String" />
</constructor>
- 프로퍼티가 데이터전송객체(DTO) 타입 클래스로 작동한다.
- MyBatis는 private 프로퍼티와 private 자바빈 프로퍼티를 지원하지만 많은 사람들은 생성자 주입을 선호한다.
* association
<association property="author" column="blog_author_id" javaType='Author">
<id property="id" column="author_id" />
<result property="username" column="author_username"/>
</association>
- association 요소는 "has-one" 타입의 관계를 이룬다.
- association 매핑은 다른 결과와 작동한다. 값을 가져오기 위해 대상 프로퍼티를 명시한다.
- MyBatis는 관계를 정의하는 두가지 방법을 제공한다.
- 관계를 위한 내포된 Select
<resultMap id ="blogResult" type="Blog">
<association property ="author" column ="blog_author_id" javaType = "Author" select="selectAuthor" />
</resultMap>
<select id="selectBlog" parameterType ="int" resultMap="blogResult">
SELECT * FROM ……..
</select>
<select id= "selectAuthor: parameterType="int" resultType="Author">
SELECT * FROM …….
</select>
>> 두개의 select 구문중 하나는 Blog를 로드하고 다른하나는 Author를 로드한다.
Blog의 resultMap은 author 프로퍼티를 로드하기 위해 "selectAuthor" 구문을 사용한다.
다른 프로퍼티들은 칼럼과 프로퍼티명에 일치하는 것들로 자동으로 로드 될 것이다.
이 방법은 간단한 반면, 큰 데이터나 목록에는 제대로 작동하지 않을 것이다.
이 방법은 "N +1 Select문제"으로 알려진 문제점을 가진다.
- 레코드의 목록을 가져오기 위해 하나의 sql구문을 실행한다.("+1"에 해당)
- 리턴된 레코드별로, 각각의 상세데이터를 로드하기 위해 select구문을 실행한다.("N"에 해당)
- 관계를 위한 내포된 Result
<select id ="selectBlog" parameterType="int" resultMap="blogResult">
select
B.id as blog_id,
B.title as blog_title,
B.author_id as blog_author_id.
A.id as author_id,
A.username as author_username,
A.bio as author_bio
from Blog B left outer join Author A on B.author_id = A.id
where B.id = #{id}
</select>
<resultMap id="blogResult" type="Blog">
<id property ="blog_id" column="id" />
<result property="title" column="blog_title" />
<association property ="author" column="blog_author_id" javaType ="Author" resultMap="authorResult" />
</resultMap>
<resultMap id="authorResult" type="Author">
<id property="id" column="author_id" />
<result property="username" column="author_user_name" />
<result property="bio" author_id = "author_bio" />
</resultMap>
>> id 요소는 내포된 결과 매핑에서 매우 중요한 역할을 담당한다.
결과중 유일한 것을 찾아내기 위한 한개 이상의 프로퍼티를 명시해야 한다.
가능하면 결과중 유일한 것을 찾아낼수 있는 프로퍼티를 선택해야 한다
[ MyBatis3 ] 동적 SQL (0) | 2014.01.22 |
---|---|
[ MyBatis3 ] SQL Map XML 파일(resultMap-3) (0) | 2014.01.22 |
[ MyBatis3 ] SQL Map XML 파일(resultMap) (0) | 2014.01.22 |
[ MyBatis3 ] SQL Map XML 파일(select, insert, update, delete, sql) (0) | 2014.01.22 |
[ MyBatis3 ] 매퍼설정 XML(typeHandlers, objectFactory, ...) (0) | 2014.01.22 |
Recent Comments