ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Clinton Begin <clinton.be...@gmail.com>
Subject Re: iBatis annotation related questions
Date Fri, 19 Feb 2010 15:27:10 GMT
If it's a concern, I'd stick with XML.  But in my 12 years in this business,
I've never swapped out one database wholesale for another.

Clinton

2010/2/19 Ing. Jan Novotný <novotnaci@gmail.com>

> Thanks. Did you notice my question about DB dialect porting issues? What is
> your opinion on this matter?
>
> Jan
>
>
> 2010/2/19 Clinton Begin <clinton.begin@gmail.com>
>
>> There will be a new release by then, probably this weekend.
>>
>> On 2010-02-19, Ing. Jan Novotný <novotnaci@gmail.com> wrote:
>> > 3rd March.
>> >
>> > 2010/2/19 Clinton Begin <clinton.begin@gmail.com>
>> >
>> >> When is your workshop?
>> >>
>> >> On 2010-02-18, Ing. Jan Novotný <novotnaci@gmail.com> wrote:
>> >> > 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.
>> >> >
>> >> > Jan
>> >> >
>> >> > 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 if
>> >> >>>>> 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 my
>> >> >>>>> 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 I
>> >> >>>>> 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 is
>> >> >>>>> 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 as
>> >> >>>>> 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 I
>> >> >>>>> 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ý
>> >> > @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
>> >> > http://blog.novoj.net
>> >> > Myšlenky dne otce Fura
>> >> > --------------------------------------------------------------
>> >> >
>> >>
>> >> --
>> >> Sent from my mobile device
>> >>
>> >> ---------------------------------------------------------------------
>> >> To unsubscribe, e-mail: user-java-unsubscribe@ibatis.apache.org
>> >> For additional commands, e-mail: user-java-help@ibatis.apache.org
>> >>
>> >>
>> >
>> >
>> > --
>> > --------------------------------------------------------------
>> > Ing. Jan Novotný
>> > @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
>> > http://blog.novoj.net
>> > Myšlenky dne otce Fura
>> > --------------------------------------------------------------
>> >
>>
>> --
>> Sent from my mobile device
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-java-unsubscribe@ibatis.apache.org
>> For additional commands, e-mail: user-java-help@ibatis.apache.org
>>
>>
>
>
> --
> --------------------------------------------------------------
> Ing. Jan Novotný
> @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
> http://blog.novoj.net
> Myšlenky dne otce Fura
> --------------------------------------------------------------
>

Mime
View raw message