<template id="getUsersTemplate">
SELECT $templateProperty$ FROM user_tbl [...] WHERE category="admin" AND ...
</select>
<select id="countUsers">
<define property="templateProperty">COUNT(*)</define>
<include template="getUsersTemplate"/>
</select>
<select id="getUsers">
<define property="templateProperty">*</define>
<include template="getUsersTemplate"/>
</select>
It is not that much better, but it avoids to have a query that has 2 meanings.
Fabien.
On 6/23/05, Brandon Goodin <[EMAIL PROTECTED]> wrote:
I'm curious what _would_ be considered elegant? Anyway, the solution
you provided should be fine. Be sure to use remapResults="true". The
other route is simply to duplicate the two queries so that they
present cleaner and you don't need ot place a count boolean into your
parameter object.
Brandon
On 6/22/05, Fabien Le Floc'h <[EMAIL PROTECTED]> wrote:
> Hi,
>
> I was wondering what would be the best way to write 2 queries that share
> almost everything with iBatis.
>
> For example if I want to do
> SELECT * FROM user_tbl [...] WHERE category="admin" AND ... LIMIT 50
> SELECT COUNT(*) FROM user_tbl [...] WHERE category="admin" AND ...
>
> ideally one would have 2 names, because it is a quite different result, but
> you want to perform both queries on the same set.
>
> The way I found is to use a dynamic query with a parameter that will act as
> a switch.
> <select id="getUsers" parameterClass="java.lang.String">
> SELECT
> <isEqual property="value" compareValue="count">
> COUNT(*)
> </isEqual>
> <isNotEqual property="value" compareValue="count">
> *
> </isNotEqual>
> FROM user_tbl [...] WHERE category="admin" AND ...
> </select>
>
> As you can see, this is not very elegant. I could generate the xml, but
> should this kind of case be handled by iBatis?
>
> The paginate queryForPaginatedList does not seem to support the total
> number of items available.
>
> So if you have a more elegant solution I'll be very happy to hear from you.
>
> Thanks for the great work on ibatis,
>
> Fabien.
>
