如何为iBatis select语句设置fetchSize

时间:2012-01-13 13:05:38

标签: java performance ibatis resultset

我在Java中使用iBatis作为ORM框架。 我有一个选择陈述

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

我正在使用queryForList方法:

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

但是它检索了大量数据并且此查询的性能非常慢。

我对这个问题的假设是iBatis具有默认的提取大小(例如在JDBS中是10),所以这就是它如此慢的原因。所以我想设置更大的提取大小(例如1000)。我怎么能这样做?

还是我看错了?

注意:我需要所有数据,因此在queryForList方法中设置最大结果对我来说不适合。

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

2 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:1)

是的,你可以在更高的级别设置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步

将此作为资源加载到Config文件中。这是Spring 4的例子

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

第3步:传递给你SqlSessionFactoryBean

sessionFactory.setConfigLocation(myBatisResource);

注意:我使用myBatis 3.3.0执行此操作。它不适用于myBatis 3.4.4(存在开放缺陷)

这将确保所有select语句都分配了fetchSize属性。