2012-01-13 20 views
7

Estoy usando iBatis como framework ORM en Java. tengo una instrucción de selecciónCómo configurar fetchSize para iBatis select statement

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

Y estoy usando el método queryForList:

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

Pero recupera una gran cantidad de datos y el rendimiento de esta consulta es bastante lento.

Mi suposición sobre estos problemas que iBatis tiene el tamaño de búsqueda predeterminado (por ejemplo, como en JDBS es 10) por lo que es tan lento. Así que quiero establecer un tamaño de búsqueda más grande (1000 por ejemplo). ¿Cómo puedo hacerlo?

¿O estoy mirando de manera incorrecta?

NOTA: Necesito todos los datos para establecer los resultados máximos en queryForList método no es una solución adecuada para mí.

List queryForList(String id, 
        Object parameterObject, 
        int skip, 
        int max) 

Respuesta

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

¿Es posible establecer el tamaño de búsqueda en la configuración global no en cada configuración de consulta? – nkukhar

+1

De ninguna manera que yo sepa. Podría implementar el interceptor Plugin (manual de usuario de MyBatis 3 página 17) que podría establecer esta propiedad en todas las consultas de selección que lo atraviesan. Esto puede no existir para su versión. –

+2

¿Puedo establecer el valor de fetchSize de forma dinámica? –

0

Sí se puede establecer de fetchSize en un nivel superior y no tiene que preocuparse por hacer para cada selección.

Paso 1

Crear un archivo SqlMapConfig.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> 

usted puede agregar cualquier valor admitido en mybatis http://www.mybatis.org/mybatis-3/configuration.html

Paso 2

Cargar esto como un recurso en tu archivo de configuración Esta es la primavera 4 ejemplo

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

Paso 3: Pase a que SqlSessionFactoryBean

sessionFactory.setConfigLocation(myBatisResource); 

Nota: Lo hice con mybatis 3.3.0. No funciona con myBatis 3.4.4 (hay un defecto abierto)

Esto asegurará que todas las declaraciones seleccionadas tengan asignada una propiedad fetchSize.