ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Christopher Lamey <cla...@localmatters.com>
Subject Re: how to map huge resultsets?
Date Wed, 03 Oct 2007 22:39:52 GMT
Can you pass the Processor (or whatever it's really called) into the object
that implements the RowHandler?

So your ItemProvider would have a method like:

public void processAllItems (Processor processor) {
    ItemRowHandler rowHandler = new ItemRowHandler();
    rowHandler.setProcessor (processor);
    sqlMap.queryWithRowHandler ("getAllItems", rowHandler);
}

Then your RowHandler would look like:

public class ItemRowHandler implement RowHandler {

    private Processor processor;

    public void handleRow(Object valueObject) {
        Item i = (Item) valueObject;
        processor.process(i);
    }
}

Cheers,
Chris

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

> 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