ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ing. Jan Novotný <novotn...@gmail.com>
Subject Re: iBatis annotation related questions
Date Fri, 19 Feb 2010 05:13:41 GMT
Thank you guys for sharing your experience. It's pretty good to hear that
combining annotations and XML approach works in practice.

My first thought was, that in case of large systems I wouldn't be able tu
guess whether I should look in the Java or XML first when searching for
particular statement definition. Next thought was about portability - we
were forced a couple of times to translate statements in the XML definitions
from one DB dialect into another. That is something one must count with when
writing pure SQL statements. But when they are scattered over these two
kinds of files, I will have to move all statements from interfaces to the
XML and then make a dialect translation. Maybe there could be a way of
extending former interface with annotations override , but this doesn't seem
much nice to me. What's your view on this?

Btw. the presentation will be more of a workshop and I thought that
everybody starts just with Maven pom and downloads few libraries from the
public repositories. There the latest one is 3-beta-9. Of course with some
effort I could compile new artifact form trunk a distribute it to their
local repositories, you're right.


2010/2/19 Nathan Maves <nathan.maves@gmail.com>

> I completely agree.
> I too have a project using IB3 and I am really loving mixing the two
> together.  I would give it a try before trying to corner yourself into using
> just one approach.
> Nathan Maves
> nathan.maves@gmail.com
> On Feb 18, 2010, at 4:09 PM, Clinton Begin wrote:
> Just curious, why are you limited to 3.0 Beta 9?
> As for annotations vs. XML, I was worried about splitting between the two
> at first, and thought that it might be good to choose one approach and stick
> with it.  But that would mean you'd have to choose XML, as annotations can't
> compete.  That said, I've been working on a project mixing annotations and
> XML, and I'm very happy with the results.  I've found that INSERT, UPDATE
> and DELETE statements pretty much always remain as annotations, along with
> simple SELECT statements.  The only things I end up putting in XML are very
> complex queries that include collections or associations.  Overall, it seems
> quite clean and easy to follow.  I've never been in a situation where I was
> confused about it.
> Cheers,
> Clinton
> 2010/2/18 Ing. Jan Novotný <novotnaci@gmail.com>
>> Hello Clinton,
>>    many thanks for your answers. They made a lot of things much clearer to
>> me - "the whitepaper" set a lot of expectations in the minds of many people
>> (including me), so that's why I asked those questions. I am sure someone
>> will ask me those questions at the presentation, so I want to be prepared.
>>    I found some more configuration options in the trunk, but for the
>> presentation I am limited to 3-beta-9 where they didnť work. But it's good
>> to know, that those issues got answered.
>>   My final question - would you encourage using annotations after all?
>> From the limited experience with iBatis 3 I have, they could be used only to
>> simple cases, but they make the code fragmented among annotations and XML. I
>> can imagine that this could be very confusing in the large scale, so maybe I
>> should recommend to attendees of the presentation to better stick with good
>> old XML. What do you think?
>> Thanks,
>> Jan
>> Offtopic:
>> P.S.: you seem very resignated to the Java - does the folks from Microsoft
>> got you? :)
>> 2010/2/18 Clinton Begin <clinton.begin@gmail.com>
>>> Hi Jan,
>>> >> expectations come from iBatis 3 Whitepaper
>>> Just to be clear, it wasn't a "white paper" it was a community whiteboard
>>> for brainstorming ideas. So it contained goals and ideas, but there was
>>> never a commitment to any of them.
>>> >> Multilevel Configuration
>>> Ultimately I decided not to implement it this way because it became hard
>>> to trace where behavior was configured.  To fully understand how a statement
>>> might behave or perform, you would have had to look in 3 places.  I wasn't
>>> satisfied with that, so I made it to be either XML or Annotations per
>>> statement.  You can happily mix mappers with annotations or xml statements,
>>> but each statement must use either one or the other.
>>> >> to state all properties in order to alter the single one
>>> That's configurable.  See the docs under the automappingBehavior setting
>>> (I think that's what it's called).
>>> >>annotations
>>> You think it's unpleasant?  You should have seen me the day that I had to
>>> remove WORKING CODE from my system because Sun changed the behavior of Java
>>> Annotations between Java 1.5 and 1.6.
>>> In a nutshell, circular references are not supported in the Annotations
>>> framework.  All of your best hopes and dreams of having something better are
>>> dashed by this one limitation.  There was a workaround in Java 1.5, but Sun
>>> considered it a compiler bug, so they "fixed" the workaround in JDK 1.6.  If
>>> you want to see it, you can dig back through a few hundred commits and see
>>> where I removed that behavior.
>>> A shame.  If this was C# I would have been able to fully realize the
>>> vision of where we wanted to take the annotation (or attributes in C#)
>>> approach.
>>> **>> 3 combinations of annotations and xml
>>> In general, I recommend using annotations for simple things, and use XML
>>> for anything more complicated.  Sorry, but Java annotations are just too
>>> messy, limited and ugly.  There's a million reasons why we had to scale back
>>> the behavior and limit it to what you see now.  If you want to understand
>>> why, I encourage you to try to implement some of your suggestions.  You'll
>>> find the same challenges.
>>> >> 4 automatic (generated) SQL
>>> Yes, I completely ditched the idea of generating SQL.  It's just a road
>>> that I wasn't prepared to take iBATIS down.
>>> >> 5 dynamic sql in annotations
>>> Yes, SelectProvider and the SQL Builder framework are the only way (other
>>> than writing your own).  I wasn't about to start putting XML embedded in SQL
>>> embedded in strings embedded in annotations... that's out of hand and bad
>>> practice IMHO.
>>> I appreciate your questions, but please realize that everything was
>>> considered.  Some things were left out for very good design reasons, others
>>> because of limitations in Java and others we might just not have had a
>>> chance to implement yet.
>>> Clinton
>>> 2010/2/18 Ing. Jan Novotný <novotnaci@gmail.com>
>>>> Hello,
>>>>    I am going to have a presentation about iBatis 3 at Czech JUG. I have
>>>> a 3-year experience with iBatis-2 and now I am doing little research on
>>>> what's new in upcoming iBatis 3 release. Most of my expectations come from
>>>> iBatis 3 Whitepaper at the iBatis Confluence site. Now I am testing the new
>>>> version and there are some things I didn't expect. I will be very pleased
>>>> anyone capable could answer me following questions so that I may forward
>>>> them to the attendees of CZ JUG:
>>>> *  1) multilevel configuration*
>>>>       Firstly I thought that there would be a chance to override less
>>>> prioritized level of configuration. Meaning, that if I have SQL represented
>>>> in an @Select annotation and I create XML statement in mapper file with the
>>>> same name, this XML declaration will take over the annotation and will be
>>>> used instead. Reality is that iBatis will fail to start complaining about
>>>> duplicate declaration. As I discovered, I can use only one or the other way
>>>> - I can combine XML file with annotation based Java DAO, but they must not
>>>> overlap in the sense of statement declaration. Is that right? Why is that
>>>> done this way?
>>>>       Next I thought there could be some means to explicitly say, that
>>>> some parts of the lower configuration level fit for me and therefore ease
>>>> life a little. Let say I have ResultMap statement in XML configuration and
>>>> 95% of its properties is fine by convention, but I need only to specify more
>>>> single property or declare association / collection mapping. In that case
>>>> have to state all properties in order to alter the single one that is needed
>>>> to be extra taken care of (or at least these are my findings from the tests
>>>> I wrote). What I really want to say is: use convention to all properties
>>>> except those that I explicitly configure in XML - that is not possible, is
>>>> it?
>>>> *  2) annotations*
>>>>       Another unpleasant surprise was, that I am not able to get along
>>>> with annotations to specify <collection> mapping - annotation @Collection
>>>> missing. Also @Association is not present - but as I discovered, it's
>>>> possible to write @Result annotations in the way that associated object gets
>>>> mapped. In documentation I found a statement, that annotations in Java
>>>> aren't powerfull enough to make some things possible, but I can't make up
>>>> why @Collection annotation is not possible to be made.
>>>> *  3) combination of XML and annotations*
>>>>       I tried combination of XML and annotations (due to lack of
>>>> @Collection annotation) to specify @Select annotation but specify output
>>>> a ResultMap mapping in the XML configuration. But that's not possible too.
>>>> Mixing configuration from annotations and XML is not possible in any way
>>>> guess. Ok, but is there any way how to reuse my annotations, to get the same
>>>> behaviour as reusing ResultMap mapping in different statements of XML
>>>> configuration?!
>>>> *  4) automatic SQL implementation*
>>>>       I didn't find any piece of this functionality. May I take it, that
>>>> this was completely discarded?
>>>> *  5) annotations and dynamic SQL*
>>>>       Finally I didn't find any clue how to use dynamic SQL in
>>>> annotations. Does that mean that @SelectProviders are the only way how to
>>>> make dynamic queries by the Java code?
>>>>    Thanks for your time and answers I can use in my presentation if
>>>> anyone asks. Please, don't be offended by my questions, generally I think
>>>> iBatis is a great DAO framework.
>>>> Cheers Jan
>>>> --
>>>> --------------------------------------------------------------
>>>> Ing. Jan Novotný
>>>> @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
>>>> http://blog.novoj.net
>>>> Myšlenky dne otce Fura
>>>> --------------------------------------------------------------
>> --
>> --------------------------------------------------------------
>> Ing. Jan Novotný
>> @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
>> http://blog.novoj.net
>> Myšlenky dne otce Fura
>> --------------------------------------------------------------

Ing. Jan Novotný
Myšlenky dne otce Fura

View raw message