ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From <robert.kasani...@accenture.com>
Subject RE: how to map huge resultsets?
Date Wed, 03 Oct 2007 22:14:44 GMT
My problem with RowHandler is that iBATIS controls the iteration. I just say

sqlMap.queryWithRowHandler ("getAllItems", rowHandler);

and all items get processed by the rowHandler.

But in my case I need to make iBATIS return items one-by-one when it is asked to do so because
the framework controls the iteration. 
This is a very simplified basic logic of the framework:

while (itemProvider.hasNext()) {
 Object item = itemProvider.next();
 process(item);
}



-----Original Message-----
From: Christopher Lamey [mailto:clamey@localmatters.com]
Sent: Wed 10/3/2007 11:55 PM
To: user-java@ibatis.apache.org
Subject: Re: how to map huge resultsets?
 
Hmm...I don't see how having an external framework prevents you from using a
RowHandler.  Your item provider could implement the RowHandler interface and
the external code wouldn't know or care about it.  Or your item provider
could wrap something that does implement RowHandler so the external code
doesn't know it exists.  The main point is that you can pull mapped objects
on a row by row basis from the database.

How is a RowHandler different that what you were describing in your first
mail? 

On 10/3/07 3:33 PM, "robert.kasanicky@accenture.com"
<robert.kasanicky@accenture.com> wrote:

> 
> Thanks for your reply.
> 
> I can't use the rowhandler callback because the iteration is external to
> iBATIS. In my case a batch framework iteratively asks for an item and
> processes it - and I am trying to implement an iBATIS item provider (I realize
> now I should have explained this in the initial post).
> 
> Robert 
> 
> 
> -----Original Message-----
> From: Christopher Lamey [mailto:clamey@localmatters.com]
> Sent: Wed 10/3/2007 11:06 PM
> To: user-java@ibatis.apache.org
> Subject: Re: how to map huge resultsets?
>  
> Hello,
> 
> You should take a look at the RowHandler interface and the
> queryWithRowHandler calls in SqlMapClient (page 61 of the pdf).  Basically,
> the RowHandler gets invoked for every row returned rather than mapping all
> the rows into objects in a collection.
> 
> Cheers,
> Chris
> 
> 
> On 10/3/07 2:37 PM, "robert.kasanicky@accenture.com"
> <robert.kasanicky@accenture.com> wrote:
> 
>> Hello,
>> 
>> I am wondering whether it possible to implement the following scenario with
>> iBATIS:
>> 
>>    1. run an iBATIS-managed select
>>    2. get a scrollable result set instead of a list of mapped objects
>>    3. manually scroll the result set and ask iBATIS for object corresponding
>> to current row 
>> 
>> Hibernate provides this possibility
>> (http://www.hibernate.org/hib_docs/reference/en/html/batch.html) so I thought
>> it would be feasible with iBATIS too, but I couldn't figure out a way. The
>> motivation is a batch scenario where the select returns a huge number of rows
>> so all mapped objects can't be loaded into memory at once.
>> 
>> The iBATIS way I am aware of is to use queryForList(String statementName, int
>> skipResults, int maxResults), but this means querying the database
>> (TOTAL_NUMBER_OF_ROWS / maxResults) times.
>> 
>> Can somebody give advice about pros & cons of the two approaches?
>> 
>> Thanks
>> Robert
>> 
>> 
>> This message is for the designated recipient only and may contain privileged,
>> proprietary, or otherwise private information.  If you have received it in
>> error, please notify the sender immediately and delete the original.  Any
>> other use of the email by you is prohibited.
> 
> 
> 
> 
> This message is for the designated recipient only and may contain privileged,
> proprietary, or otherwise private information.  If you have received it in
> error, please notify the sender immediately and delete the original.  Any
> other use of the email by you is prohibited.




This message is for the designated recipient only and may contain privileged, proprietary,
or otherwise private information.  If you have received it in error, please notify the sender
immediately and delete the original.  Any other use of the email by you is prohibited.

Mime
View raw message