Как установить fetchSize для оператора выбора iBatis - PullRequest
8 голосов
/ 13 января 2012

Я использую iBatis в качестве платформы ORM в Java.У меня есть оператор выбора

<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 ]

12 голосов
/ 13 января 2012
<select id="SELECT_TABLE" parameterType="String" fetchSize="500" resultType="hashmap">
    SELECT * FROM TABLE WHERE NAME = #{value}
</select>
1 голос
/ 16 мая 2017

Да, вы можете установить 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: Передайте вам SqlSessionFactoryBean

sessionFactory.setConfigLocation(myBatisResource);

Примечание. Я сделал это с помощью myBatis 3.3.0. Это не работает с myBatis 3.4.4 (есть открытый дефект)

Это гарантирует, что всем операторам select будет присвоено свойство fetchSize.

...