2012-01-13 20 views
7

मैं जावा में ओआरएम फ्रेमवर्क के रूप में iBatis का उपयोग कर रहा हूं। मैं एक का चयन करें बयानiBatis के लिए fetchSize कैसे सेट करें चुनें स्टेटमेंट

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

है और मैं queryForList विधि का उपयोग कर रहा हूँ:

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

लेकिन यह डेटा की एक बड़ी मात्रा में प्राप्त करता है और इस क्वेरी के प्रदर्शन बहुत धीमी है।

इस मुद्दे के बारे में मेरी धारणा है कि iBatis के पास डिफ़ॉल्ट fetch आकार है (जैसे जेडीबीएस में 10 है) इसलिए यही इतना धीमा है। तो मैं बड़ा fetch आकार (उदाहरण के लिए 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

क्या प्रत्येक क्वेरी कॉन्फ़िगरेशन में fetch आकार को वैश्विक कॉन्फ़िगरेशन में सेट करना संभव है? – nkukhar

+1

कोई रास्ता नहीं है कि मुझे पता है। आप प्लगइन इंटरसेप्टर (MyBatis 3 उपयोगकर्ता मैनुअल पेज 17) को कार्यान्वित कर सकते हैं जो इस संपत्ति को इसके माध्यम से गुजरने वाले सभी चुनिंदा प्रश्नों पर सेट करने में सक्षम हो सकता है। यह आपके संस्करण के लिए मौजूद नहीं हो सकता है। –

+2

क्या मैं गतिशील रूप से fetchSize मान सेट कर सकता हूं? रिकॉर्ड के लिए –

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 संपत्ति सौंपी जाएगी।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^