Mybatis
SQL driver
पर बहुत कुछ छोड़ देता है जिसका उपयोग किया जा रहा है, और यह सटीक व्यवहार RowBounds
. के आसपास दिखाई देता है उनमें से एक है।
http://mybatis.github.io/mybatis-3/java-api.html देखें, विशेष रूप से वह अनुभाग जो कहता है:
<ब्लॉकक्वॉट>विभिन्न चालक इस संबंध में दक्षता के विभिन्न स्तरों को प्राप्त करने में सक्षम हैं। सर्वोत्तम प्रदर्शन के लिए, SCROLL_SENSITIVE या SCROLL_INSENSITIVE के परिणाम सेट प्रकारों का उपयोग करें (दूसरे शब्दों में:FORWARD_ONLY नहीं)।
डिफ़ॉल्ट रूप से UNSET
. है , लेकिन आप SCROLL_SENSITIVE
. का उपयोग करने का प्रयास कर सकते हैं ResultSetType
. के रूप में select
. में विशेषता टैग करें और देखें कि क्या इससे मदद मिलती है। उस पर अधिक जानकारी के लिए http://mybatis.github.io/mybatis-3/sqlmap-xml.html देखें।
यदि वह काम नहीं करता है तो आप RowBounds
के उपयोग को छोड़ कर हमेशा समस्या का समाधान कर सकते हैं और एक सेटिंगबीन . लागू करें वर्ग (या समान) जिसे आपका select
टैग एक parameterType
के रूप में लिया जाएगा , और जिसमें offset
. के लिए फ़ील्ड शामिल हैं और limit
(या शायद rowStart
और rowEnd
Oracle
. के लिए अधिक समझदारी , और फिर आप उन्हें आवश्यकतानुसार रनटाइम पर सेट कर सकते हैं और select
के समय उन्हें गतिशील रूप से SQL में इंटरपोलेट कर सकते हैं निष्पादित किया जाता है।
थोड़ा और कोड होने पर, आप शुद्ध गतिशील एसक्यूएल के माध्यम से व्यवहार को ठीक उसी तरह नियंत्रित कर सकते हैं जैसा आप चाहते हैं। मैंने Mybatis
. के साथ इस तरह के दृष्टिकोण का उपयोग किया है और Postgres
और इसने अच्छा काम किया है।
तो आप अपनी सेटिंगबीन . को लागू करेंगे उन क्षेत्रों और उनके गेटर्स और सेटर्स के साथ कक्षा, और आपका select
तब कथन कुछ ऐसा दिखाई दे सकता है:
<select
id="selectFoo"
parameterType="com.foo.bar.SettingsBean">
select *
from foo
where rownum >= #{rowStart}
and rownum < #{rowEnd}
</select>