2017-12-05 16 views
0

아래와 같이 매핑 파일을 작성했습니다.mybatis <id> 태그가 <resultMap> 인 경우

동일한 NAME colmun 값의 레코드가 2 개인 경우 mybatis는 1 개의 Foo 객체 만 반환합니다. 술집의 칼럼이 다르므로 2Foo 객체를 원합니다.

그래서 아래 해결 방법이 있습니다. (존재하지)

<resultMap id="fooResultMap" type="Foo" > 
    <id column="dummy_column_for_unique" /> 
    <result column="NAME" property="name" jdbcType="VARCHAR" /> 
    <association property="bar" resultMap="barResultMap" /> 
</resultMap> 

내가 된 resultMap > <에 < > ID 태그를 추가하고 "dummy_column_for_unique '항목 더미이다. 2 개의 Foo 객체를 성공적으로 가져 왔습니다.

더미 열 결과가 null 인 것으로 가정하고 mybatis가 null 값을 다른 레코드로 처리한다고 가정합니다. 그런 행동은 내가 검색 한 인터넷의 매뉴얼이나 다른 자료에 설명되어 있지 않습니다.

이 동작에 대한 정보가 있습니까?

답변

0

MyBatis는 ID를 사용하여 개체를 매핑합니다. ResultMap에 ID가없는 경우 모두 동일한 객체에 매핑됩니다. 테이블에 기본 키가 있어야하지만 위와 같은 방법으로 가짜 ID를 만들면 문제를 해결할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 사실, 내 encounterd sqls 다른 사람에 의해 writtern 및 복잡한 (조인, 그룹화, 조합 ...), 그래서 고유 한 열을 식별하는 것은 어려운 것 같습니다 .... #하지만 합법적 인 방법은 고유 한 열을 식별하는 것입니다 당신이 말한대로. –

1

mybatis의 메일 링리스트에서 행 번호를 사용하는 것이 좋습니다. https://groups.google.com/forum/#!topic/mybatis-user/FAvrJ4piYlU

그래서 내 최종 결과 맵은 아래와 같습니다.

<resultMap id="fooResultMap" type="Foo" > 
    <id column="rownum" /> 
    <result column="NAME" property="name" jdbcType="VARCHAR" /> 
    <association property="bar" resultMap="barResultMap" /> 
</resultMap> 

및 SQL은 아래와 같다 (원본은 원본 SQL SQL을 수정하지 않는 외부 선택 문장 의해 wraped,이 SQL 구문 MySQL 용이다).

select @rownum:[email protected]+1 as rownum, org.* from (
### original sql ### 
) org, (select @rownum:=0) r 

이 정보가 도움이되기를 바랍니다.