2012-01-13 14 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の方法での最大結果を設定する方法は適切ではありません。

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

+1

私は知りません。それを通過するすべての選択クエリでこのプロパティを設定できるPluginインターセプタ(MyBatis 3ユーザーマニュアル17ページ)を実装することができます。あなたのバージョンには存在しないかもしれません。 –

+2

fetchSizeの値を動的に設定できますか? –

0

はい、あなたがより高いレベルでのfetchSizeを設定することができ、すべての選択のためにやって心配する必要はありません。

ステップ1

あなたはリソースとしてステップ2

ロードにhttp://www.mybatis.org/mybatis-3/configuration.html

これをMyBatisの でサポートされている任意の値を追加することができます

<?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の-config.xmlの作成あなたの設定ファイルで。

あなたにSqlSessionFactoryBean

sessionFactory.setConfigLocation(myBatisResource); 
を渡し注:私はMyBatisの3.3.0でこれをやったこれは

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

ステップ3春4の例です。 myBatis 3.4.4では動作しません(オープン欠陥があります)

これにより、すべてのselect文にfetchSizeプロパティが割り当てられます。

関連する問題