ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Brandon Goodin <brandon.goo...@gmail.com>
Subject Re: How to reuse a query?
Date Fri, 17 Dec 2004 20:20:45 GMT
We have had discussion of creating sql "fragments" for reuse of common
static and dynamic sql routines. However, the option is not available
currently in IBatis. I'm afraid redundance is the only option at this
point.

If you really wanted to get nuts you could use a properties file and
place sql fragments in. Then you coudl use the ${property.key.here}
notation in your sql maps where you want the sql statement to be used.

Another option (available in the next release) would be to place a
dynamic tag around your SELECT columns so that in one dynamic element
it is 'COUNT(1)' and the other is '*'. You cannot do this currently
because of the way ibatis caches the property mappings for mapped
statement. However, in the next release you will have the option to
turn off the property mapping caching for a mapped statement. The
price you pay here will be performance. I do not think this would be a
good option if performance is important.

Brandon

On Fri, 17 Dec 2004 16:42:16 +0100, Fabrizio Gianneschi
<fabrizio.gianneschi@gruppoatlantis.com> wrote:
> Hello,
> 
> first of all, hello everybody since I'm new on this list even I'm using
> iBATIS sice a couple of months.
> 
> I'm looking for a smart trick to avoid duplicating the sql statements when
> using SELECT COUNT.
> 
> For paginating needs, I've to execute two separate statements, the first one
> to count the length of the result set and the second one to fetch the data.
> Here's an example:
> 
> <select id="myQuery" resultClass="int" parameterClass="com.MyClass">
>    SELECT *
>    FROM table INNER JOIN ...
> ...
> </select>
> 
> <select id="myQueryCount" resultMap="myMap" parameterClass="com.myClass">
>    SELECT COUNT(1) as c
>    FROM table INNER JOIN ... //"Same" query as before.
> ...
> </select>
> 
> I don't like to write twice the body of the query (which could be very long
> and error-prone) so I'm looking for an iBATIS feature to solve the problem
> (an alias, a const...)
> 
> Something like the folliwing, supposing that iBATIS substitutes the $_..._$
> with the body of the referred query:
> 
> <select id="myQuery" resultClass="int" parameterClass="com.MyClass">
>    SELECT *
>    FROM table INNER JOIN ...
> ...
> </select>
> <select id="myNewQueryCount" resultMap="myMap" parameterClass="com.myClass">
>    SELECT COUNT(1) as c
>    FROM $_myQuery_$;
> ...
> </select>
> 
> Thanks a lot
> Fabrizio
> 
>

Mime
View raw message