ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jeff Butler" <jeffgbut...@gmail.com>
Subject Re: flexible queries?
Date Wed, 28 Jun 2006 21:19:01 GMT
There is some discussion about improving the dynamic tags on the iBATIS Wiki
here:

http://opensource.atlassian.com/confluence/oss/display/IBATIS/Improved+Dynamic+SQL+Whiteboard

Feel free to add to the discussion.  However, as you noted, this is a far
from trivial task and I don't sense any will to make a change anytime soon.

Jeff Butler


On 6/28/06, Vadim Grinshpun <vadim@ll.mit.edu> wrote:
>
> True, that is a way to get around this issue (and it is what I'm doing
> now).
> While I agree that logic is more readable when written in Java, I'd also
> like to point out that the main advantage of using the data mapper (at
> least for me) is to avoid having anything query-related in the code.
> This kind of logic has no use outside of a particular database
> definition/query, and would be good to keep away from the bean that
> otherwise acts only as a container for data...
>
> The bottom line is I'll be a happier man if the iBATIS folks do wind up
> adding something that allows this to be done :)
> (and I appreciate that this is not a trivial task, just expressing a hope
> :)
> -Vadim
>
>
> Jeff Butler wrote:
> > There's nothing in iBATIS that will do this.  I've done something
> > similar in the past by adding a getter to the parameter object and
> > coding the logic in the getter method.  Like this:
> >
> > public boolean isComplexCondition {
> >   ...some complex decision
> > }
> >
> > Then coding an <isEqual property="complexCondition" value="true"> in
> > the SQL Map.
> >
> > I ended up liking this better anyway - I think the logic is easier to
> > understand when written in Java.
> >
> > Jeff Butler
> >
> >
> >
> > On 6/28/06, *Vadim Grinshpun* <vadim@ll.mit.edu
> > <mailto:vadim@ll.mit.edu>> wrote:
> >
> >     Er... Thanks, but either you misread my example, or I completely
> >     do not
> >     understand what you mean.
> >     The example I gave uses a large chunk of  iBATIS-like *pseudocode*
> >     (there is no 'if' tag and no 'or' tag!), and thus cannot work as is.
> >     I've looked through the Dev Guide ( version that was in SVN as of
> >     6/20),
> >     but so far was unable to find anything that would allow for this
> >     kind of
> >     functionality. (effectively, what I want is to have a *SINGLE*
> iBATIS
> >     conditional that would test multiple properties and OR the results).
> >     Could you take another look at it, please, or explain in more
> detail?
> >     Thanks!
> >     -Vadim
> >     Niels Beekman wrote:
> >     > Yes, that should work out just fine. See the Developer Guide for
> >     some
> >     > examples...
> >     >
> >     > -----Original Message-----
> >     > From: Vadim Grinshpun [mailto: vadim@ll.mit.edu
> >     <mailto:vadim@ll.mit.edu>]
> >     > Sent: woensdag 28 juni 2006 20:58
> >     > To: user-java@ibatis.apache.org <mailto:
> user-java@ibatis.apache.org>
> >     > Subject: flexible queries?
> >     >
> >     > Hi everyone,
> >     >
> >     > Suppose I have a query where I want a join to be performed only
> >     if *one
> >     > or more* of a set of parameters are present.
> >     > Is there a way in SqlMaps to do something like this? (below is an
> >     > example snippet of  what I'd like to do, using some pseudocode
> >     in the
> >     > first <dynamic> section):
> >     >
> >     > SELECT * FROM
> >     >     table_foo f, table_bar b
> >     >    <dynamic> <!-- if any of the params in the conditional are
> >     defined,
> >     > add one more table to join -->
> >     >       <if>
> >     >         <or>
> >     >           <isEqual property="X.defined" compareValue="true" />
> >     >           <isEqual property=" X.defined" compareValue="true" />
> >     >         </or>
> >     >        <then>, table_baz z</then>
> >     >       </if>
> >     >    </dynamic>
> >     >    WHERE f.field = b.field
> >     >    <dynamic>
> >     >      <isEqual property="X.defined" compareValue="true"
> prepend="AND"
> >     >  >z.x_field > #X.value#</isEqual>
> >     >      <isEqual property=" Y.defined" compareValue="true"
> >     prepend="AND"
> >     >  >z.y_field = #Y.value#</isEqual>
> >     >   </dynamic>
> >     >
> >     >
> >     > Thanks,
> >     > --Vadim
> >     >
> >     >
> >
> >
>
>

Mime
View raw message