2012-01-13 88 views
7

我使用iBatis作爲Java中的ORM框架。 我有一個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方法對我來說不是一個合適的解決方案。

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

回答

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

是否有可能將獲取大小設置爲全局配置而不是在每個查詢配置? – nkukhar 2012-01-19 16:32:04

+1

沒有辦法,我知道。你可以實現Plugin攔截器(MyBatis 3用戶手冊第17頁),它可以在所有通過它的select查詢中設置這個屬性。這可能不適用於您的版本。 – 2012-01-20 12:44:52

+2

我可以動態設置fetchSize值嗎? – 2013-03-12 03:30:38

0

是的,你可以在更高的層級設定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(存在開放缺陷)

這將確保所有選擇語句都具有分配給它們的fetchSize屬性。