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 3.0 Bugs/Suggestions
Date Sun, 16 Aug 2009 17:13:06 GMT
I've made it through these items... don't take offence to the
strikethroughs, I used your list as a sort of TODO list.  :-)

Your comments were very helpful, and offered a different perspective for
both the software and the documentation.  It's always amazing how one person
might thing something is self explanatory and clear as day, and another sees
something completely different.  :-)  I've  implemented the doc advice, and
addressed some of the other points below.

Cheers,
Clinton

*1) http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd
Getting error if I try to add either <typeAliases> or <typeAlias> in a
mapper xml file. Works only in a Configuration.xml file.
*
This is intentional.  TypeAliases are all defined in the config now.  The
old way left it ambiguous as to which type was being referenced, and it
became more complicated with cross-mapping references to ResultMaps or
statements in other mapping files.

*2) session.select
I am able to invoke the three param .select(arg0, arg1, arg2) but not
.select(id, param). The id/param select isn't available.
*
This is a documentation problem if it's not clear.  I'll see what I can do
to clear it up.   In a nutshell:

.selectOne is the equivalent of the old queryForObject -- use it when
selecting one instance of your result object.
.selectList is the equivalent of the old queryForList -- use it when
selecting a list of your result objects.
.select is used when you want to control how your results are loaded with
the ResultHandler.

And I think you're right, I don't believe I documented the ResultHandler
impl.

*3) Is there anyway we can keep the colon syntax for defining jdbcType. It
could be in addition to the comma seperated diffinations. Just looks cleaner
and is much shorter:
e.g. #{timeZone,jdbcType=VARCHAR} vs #{timeZone:VARCHAR}
*
Certainly there's a way.  :-)  You make a good argument, and I think we can
support it.  I'll try to get it in for the next Beta.

*4) It would be nice to have a more straight forward way to get access to
Connection

sqlSession.getConfiguration().getEnvironment().getDataSource().getConnection();
       vs sqlSession.getConnection();
*
I'll think about that one.  My gut tells me we probably won't support that.
While it would save some typing, we want to discourage it.  The challenge is
that sometimes iBATIS can be configured without a datasource (although we
also want to discourage that if you want to use lazy loading). Maybe this is
something best left to a quick little utility method.

*5)  ... I get a "Casting Exception". Apparently a Long is returned instead
of a Boolean. I am running on a mysql database. As you know, mysql deals
with booleans as bits (1's or 0's). Oddly enough this works fine in the
ibatis 2.x versions.
*
iBATIS 3 is more strict in the typing.   JDBC has a get/setBoolean method
pair, so be sure to define your result type as boolean, then this should
work.  Otherwise you're literally trying to cast an integer to a boolean.
Note that this relies on the driver's support for translating the 1/0 during
the call to get/setBoolean.  Otherwise you'll need to create a DB specific
type handler.

*6) Not sure if this will be of any use to anyone, but I've written a
CalendarTypeHandler. On the surface, it seems to be working fine
*
I'll create a section on the wiki for contributed type handlers.... once our
wiki is back up!  Ticket submitted to atlassian...

*7) Picky user guide stuff
The User guide is overall very clean, complete, and clear. Great job!!!

a)"....There are two TransactionManager types (i.e. type=”?????”) that are
in...". What is the ???? suppose to be?
b) An explanation about the Enum type handler would be nice (like what's
persisted, code or index. Is it configurable?)
c) "The iBATIS XML configuration file is contains settings and properties
that have a dramatic effect on how..." Get rid of "is"
*
All addressed... thanks for keeping these notes.

*8) What .selectOne() is isn't clear. Maybe a note that an exception will be
thrown if either a list or a null is returned?
*
I added a bit to the doc to hopefully clear this up.




On Sat, Aug 15, 2009 at 7:31 PM, I L<isster@hotmail.com> wrote:
> Hi,
>
> Awesome product renovation.
>
> Heres some things I found that might have already been discussed:
>
> 1) http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd
> Getting error if I try to add either <typeAliases> or <typeAlias> in a
> mapper xml file. Works only in a Configuration.xml file.
>
> 2) session.select
> I am able to invoke the three param .select(arg0, arg1, arg2) but not
> .select(id, param). The id/param select isn't available.
>
> There is no examples in the pdf on how to use the three param select.
>
> 3) Is there anyway we can keep the colon syntax for defining jdbcType. It
> could be in addition to the comma seperated diffinations. Just looks
cleaner
> and is much shorter:
> e.g. #{timeZone,jdbcType=VARCHAR} vs #{timeZone:VARCHAR}
>
> e.g.
>    count != #{usercount,jdbcType=BIGINT} vs count != #{usercount:BIGINT}
>
>
> 4) It would be nice to have a more straight forward way to get access to
> Connection
>
>
sqlSession.getConfiguration().getEnvironment().getDataSource().getConnection();
>        vs
>        sqlSession.getConnection();
>
> 5)
>     <select id="isUniqueUsername"  parameterType="map"
> resultType="boolean">
>         SELECT (count(*) = 0)
>         FROM user Where 1=0
>     </select>
>
> If I access this select the old fashion way:
>        ((Boolean) getSession().selectOne("User.isUniqueUsername",
> map)).booleanValue();
>
> ... I get a "Casting Exception". Apparently a Long is returned instead of
a
> Boolean. I am running on a mysql database. As you know, mysql deals with
> booleans as bits (1's or 0's). Oddly enough this works fine in the ibatis
> 2.x versions.
>
> 6) Not sure if this will be of any use to anyone, but I've written a
> CalendarTypeHandler. On the surface, it seems to be working fine
>
>
> public class CalendarTypeHandler extends BaseTypeHandler {
>
>     public void setNonNullParameter(PreparedStatement ps, int i, Object
> parameter, JdbcType jdbcType) throws SQLException {
>         Calendar calendar = (Calendar) parameter;
>         ps.setTimestamp(i, (new Timestamp(calendar.getTimeInMillis())));
>     }
>
>     public Object getNullableResult(ResultSet rs, String columnName)
throws
> SQLException {
>         java.sql.Timestamp sqlTimestamp = rs.getTimestamp(columnName);
>         if (sqlTimestamp != null) {
>             return new java.util.Date(sqlTimestamp.getTime());
>         }
>         return null;
>     }
>
>     public Object getNullableResult(CallableStatement cs, int columnIndex)
> throws SQLException {
>         java.sql.Timestamp sqlTimestamp = cs.getTimestamp(columnIndex);
>         if (sqlTimestamp != null) {
>             return new java.util.Date(sqlTimestamp.getTime());
>         }
>         return null;
>     }
>
> }
>
> 7) Picky user guide stuff
> The User guide is overall very clean, complete, and clear. Great job!!!
>
>
a)"....There are two TransactionManager types (i.e. type=”?????”) that
are in...".
> What is the ???? suppose to be?
> b) An explanation about the Enum type handler would be nice (like what's
> persisted, code or index. Is it configurable?)
> c)
>
"The iBATIS XML configuration file is contains settings and properties
that have a dramatic effect on how..."
> Get rid of "is"
>
> 8) What .selectOne() is isn't clear. Maybe a note that an exception will
be
> thrown if either a list or a null is returned?
>
>
> Thats all I have found so far. Cheers!
>
>
> ________________________________
> Windows Live™: Keep your life in sync. Check it out.

Mime
View raw message