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: SQL selector
Date Mon, 12 Jan 2009 23:24:18 GMT
It's not too much of a bad practice - many others (including Spring)
take a similar approach to getting around the "official" API for
iBATIS.

I'm glad a plugin works for you!  BTW - I'm excited about all the
plugins people are writing for Ibator - stuff I never would have
thought of doing.  It's really great to see people using this
mechanism.

I also wanted to mention that you could make this same modification
through the implementation of a custom extension to
AbstractDAOTemplate.  Either way should work in your case.

Jeff Butler



On Mon, Jan 12, 2009 at 10:41 AM, Ben Shory <ben.s@sapiens.com> wrote:
> Since I'm trying to make it transparent as possible for the DBAs I
> decided to create a plugin
> Which modifies all the DAO generated methods to be like this for
> example:
>
> Integer count = (Integer)
> getSqlMapClientTemplate().queryForObject(getStmtId("table.ibatorgenerate
> d_countByExample"), example);
>
> ^^^^^^^^^^^
> This plugin also sets a custom super class which implments getStmtId -
> something like this:
>
>        protected String getStmtId(String stmtId) {
>                initStmtsIfNeeded();
>                if(stmts.containsKey("specific-"+stmtId)) {
>                        return "specific-"+stmtId;
>                }
>                return stmtId;
>        }
>
> Now my DBAs / clients may just drop-in their custom SQL with the naming
> convention of specific-{table} for the sqlmap namespace
>
> To determine if the statement exsits I had to downcast to
> SqlMapClientImpl, hope it's not too much of bad practice..
>
> Thanks.
>
>
> -----Original Message-----
> From: Jeff Butler [mailto:jeffgbutler@gmail.com]
> Sent: Monday, January 12, 2009 6:27 PM
> To: user-java@ibatis.apache.org
> Subject: Re: SQL selector
>
> iBATIS does not have a simple API for determining if a statement exists
> - so there's some difficulty with this idea.
>
> This reminds me of the design principle "prefer polymorphism over
> instanceof".  It seems to me that you could extend a generic DAO
> implementation with a vendor specific implementation and override just
> the methods that have vendor specific SQL.  You would also have to
> configure Spring so that you could pull out the vendor specific
> implementation that you need.  This seems easier to me - but I may not
> understand the entirety of what you're trying to accomplish.
>
> Jeff Butler
>
> On Mon, Jan 12, 2009 at 3:19 AM, Ben Shory <ben.s@sapiens.com> wrote:
>> It might be better to write a plugin that manipulates the generated
>> method?
>>
>> -----Original Message-----
>> From: Ben Shory [mailto:ben.s@sapiens.com]
>> Sent: Monday, January 12, 2009 11:13 AM
>> To: user-java@ibatis.apache.org
>> Subject: SQL selector
>>
>> Hi,
>> Before any statement execution, I would like to first check if it has
>> a vendor specific implementation and execute it if so or the default
>> one if not.
>> My DAOs are generated as spring dao with ibator.
>> I thought of doing something like -
>>
>>        String stmtId = "table"+spec_postfix+".countByExample";
>>        if(!statementExists(stmtId)) {
>>                stmtId = "table.countByExample";
>>        }
>>        Integer count = (Integer)
>> getSqlMapClientTemplate().queryForObject(stmtId,
>>                        example);
>>        return count;
>>
>> Is this a good approach?
>> Would I have to override SpringDAOTemplae?
>>
>>
>

Mime
View raw message