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: abator auto generated keys, multiple databases and domain relationships
Date Tue, 18 Mar 2008 14:11:27 GMT
1. iBATIS supports generated keys through the use of a query (not the JDBC
3.0 support for generated keys).  Abator supports this too through the
<generatedKey> configuration element.  I doubt that iBATIS 2.x will support
JDBC 3.0 features, so this is what you must use for now.  As far as multiple
databases, I know Brandon has made this work by passing the query string as
an unresolved property to the <generatedKey> element - which will cause
Abator to leave the property in the generated <selectKey> element - so you
can pass the db specific query string at runtime.  Use Abator from SVN for
that support.

2. There are many threads on the user list about supporting multiple
databases.

3. There are no plans to use freemarker or velocity for code generation in
Abator.  If I recall correctly, someone posted a freemarker implementation
on the list quite a while ago.

4. There are many threads on the user list discussing Abator and table
relationships.  Your strategy is fine, but I would also suggest looking at
the iBATIS support for the "groupBy" function - this *might* yield better
performance in some circumstances.

Jeff Butler



On Tue, Mar 18, 2008 at 4:40 AM, Zach Visagie <zachv@ipay.co.za> wrote:

> Hi all
>
> I'm relatively new to ibatis, so sorry for the long mail. We've got
> basic web admin applications (using spring) for a transactional type
> product, which needs to support multiple database vendors. Some of the
> tables are quite denormalized so that's why I like ibatis over ORM stuff
> and my superiors don't like background magic and prefer simplicity above
> all and they like sql above ORM. I've also been tasked to improve
> development speed, so we are using abator.
>
> A couple of questions:
> 1. Abator auto generated keys.
> Is it possible for abator to use the auto_generated keys feature,
> instead of using a query? We have a custom connection pool able to
> return them even for postgres.
>
> 2. What strategies do you recommend for supporting multiple db vendors?
> The basic abator stuff should work on most db's or am I mistaken? This
> is also the reason for question 1, since I was hoping to generate the
> abator stuff from a single db and use it for the others and don't want
> the DAO's to have db specific stuff if I can avoid it.
>
> I thought to maybe add additional sqlmaps for any advanced requirements
> beyond abator dao's. And could have db specific queries for report-like
> situations in different sqlMaps loaded on startup based on db.
>
> 3. What is the estimated work for modifying abator to use velocity or
> freemarker templates for modifying code generation?
>
> 4. I want to expose relationships in domain classes to the UI but abator
> is unable to provide that. I figure that it will still save me on time
> to use abator and just manage the relationships in the service layer and
> in abstract super classes for the domain objects.
> UI <-> Service <-> DAO
>
> User
> name:String
> roles:List
>
> (AbatorGenerated)
> AdminUser extends User
> name:String
>
> public void createUser( User user )
> {
>  userTableDAO.insert( user );
>  List<Role> roles = user.getRoles();
>  for( Role role : roles )
>  {
>    AdminUserRoleLnk lnk =  new AdminUserRoleLnk( );
>    lnk.setAdminUserId( user.getId( ) );
>    lnk.setAdminRoleId( role.getId( ) );
>    adminUserRoleLnkDAO.insert( lnk );
>  }
> }
>
> The problem comes in an extra iteration needed for retrieving the user's
> roles, as the following example shows.
>
> public List<User> findUsers( )
> {
>  AdminUserExample example = new AdminUserExample( );
>  example.setOrderByClause( "username" );
>  List<User> users = adminUserDAO.selectByExample( example  );
>  for( User u : users )
>  {
>    List<Role> roles = getUserRoles( u.getId() );
>    u.setRoles( roles );
>  }
>  return users;
> }
>
> I can live with it for smaller tables, since performance is not a major
> requirement, but any other suggestions? Is there any way to pass a row
> handler down to the DAO? I don't see a way to pass a row handler to the
> spring dao classes, or am I just missing it or is there some other way
> to process each row? Of course this I'd like in the context of minimal
> interference with generated code and minimal work effort, which is a
> high priority due to many tables.
>
> Regards
> Zach
>
>
>
>
>
>
>
>
>
>

Mime
View raw message