2012-01-13 1 views
7

Java에서 ORM 프레임 워크로 iBatis를 사용하고 있습니다. 나는 select 문을iBatis select 문에 fetchSize를 설정하는 방법

<select id="getList" resultMap="correctMap"> 
    SELECT * 
    FROM SOME_TABLE 
</select> 

을하고 난 queryForList 방법을 사용하고 있습니다 :

List<MappedObject> list = getSqlMapClientTemplate().queryForList("getList"); 

을하지만 데이터의 큰 금액을 검색하고이 쿼리의 성능이 매우 느립니다.

iBatis에서 기본 가져 오기 크기 (예 : JDBS가 10)와 같은이 문제에 대한 내 가정으로 인해 매우 느립니다. 그래서 더 큰 가져 오기 크기 (예를 들어 1000)를 설정하고 싶습니다. 내가 어떻게 할 수 있니?

아니면 잘못된 길을 찾고 있습니까?

참고 : 모든 데이터가 필요하므로 최대 결과를 queryForList 방법으로 설정하면 적절한 해결책이 아닙니다.

답변

10
<select id="SELECT_TABLE" parameterType="String" fetchSize="500" resultType="hashmap"> 
    SELECT * FROM TABLE WHERE NAME = #{value} 
</select> 
+0

각 쿼리 구성에 전역 설정으로 가져 오기 크기를 설정할 수 있습니까? – nkukhar

+1

내가 알지 못하는 방법. 이를 통과하는 모든 선택 쿼리에서이 속성을 설정할 수있는 플러그인 인터셉터 (MyBatis 3 사용자 설명서 페이지 17)를 구현할 수 있습니다. 사용중인 버전에 해당하지 않을 수 있습니다. –

+2

fetchSize 값을 동적으로 설정할 수 있습니까? –

0

List queryForList(String id, 
        Object parameterObject, 
        int skip, 
        int max) 
예를 더 높은 수준에서 fetchSize를 설정하고 모든 선택에 대한 것에 대해 걱정할 필요가 없습니다.

1 단계

는 파일의 MyBatis-config.xml에

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE configuration 
     PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
     "http://mybatis.org/dtd/mybatis-3-config.dtd"> 
<configuration> 
    <settings> 
     <setting name="lazyLoadingEnabled" value="false"/> 
     <setting name="defaultFetchSize" value="5000"/> 
    </settings> 
</configuration> 
만들기 당신은 어떤 값이 자원으로 MyBatis로 http://www.mybatis.org/mybatis-3/configuration.html

2 단계

하중이 지원 추가 할 수 있습니다

구성 파일에. 이 봄 4 예를

@Value("classpath:mybatis-config.xml") 
private Resource myBatisResource ; 

단계 3 : 통과 당신이

sessionFactory.setConfigLocation(myBatisResource); 

참고 SqlSessionFactoryBean에 : 나는 MyBatis로 3.3.0로 이런 짓을. myBatis 3.4.4에서는 작동하지 않습니다 (열린 결함 있음)

이렇게하면 모든 select 문에 fetchSize 속성이 할당됩니다.