2011-10-27 3 views
1

나는 쌓입니다. 나는 mybatis에 찬성하여 SQL의 직접적인 사용을 대체하고자한다. faramework. 채워진 속성 맵이있는 계정 목록을 선택하고 싶습니다. MyBatis의 콜렉션 ('select *')을 매핑합니다.

그러나이 계정의 시작, 첫 번째 계정 클래스

public class Account { 
    private int id; 
    ... 
    private Map<String, String> properties; 
    ... 
    //setters/getters 
} 

매퍼 인터페이스에서 시작할 수 있습니다 분명하다 및 매핑 파일은 선택

<select id="getAccountById" resultMap="account"> 
     select ... from account where id = #{id} 
</select> 

<select id="getAccountProperties" resultType=map> 
     select * from properties where id=#{id} 
</select> 

첫 번째 선택 반환 계정

개체, 두 번째 java.util의이 포함되어 있습니다. 지도에는 열 이름/ 쌍이 포함되어 있습니다.

나는 각 계정 개체가 속성으로지도를 포함, 그래서 계정의 목록을 반복하고 ID로

for(Account account : accountList) { 
    int id = account.getId(); 
    Map properites = mapper.getAccountProperties(id); 
    account.setProperties(properties); 
} 

을 해당 속성을 선택하고 기본적으로는 작동하지만 200 개 계정은 약 2 분 정도 소요 싶습니다 , 그리고 그것은 받아 들일 수 없다.

collection으로 resultMap을 사용하면 속도가 빨라지기를 바랍니다. 그러나 문제는 어떻게해야합니까 . resultMap="account"은 어떻게 표시되어야합니까

<resultMap id="account" type="Account"> 
    <id property="id" column="id"> 
    ... 
    <collection property="properties" javaType="map" column="id" select="getAccountProperties" /> 
</resultMap> 

이 경우 선택한 계정 개체에는 속성이 없습니다. 큰 질문은 다음과 같습니다. 속성을 계정 개체와 연결하는 방법은 무엇입니까?

답변

3

각에 대한 그런 다음 resultMap는

<resultMap id="account" type="Account"> 
    <result property="id" column="id"> 
    <result property="properties" column="id" select="getAccountProperties" /> 
</resultMap> 

를 사용하는 경우 MyBatis로 계정을 매개 변수로 열 ID 값을 통과하는 getAccountProperties 문을 실행,하지만 당신은 선택 태그에 그것을 받아 들일 수 있도록해야합니다

<select id="getAccountProperties" resultClass="java.util.Map" parameterClass="java.lang.Integer" > 
    select * from properties where id=#value# 
</select> 
관련 문제