I agree with Dimiter. If you are using maps you should ensure that it
contains all the properties/keys to satisfy your needs. It seems to me
that it is their choice to use maps (which is a REALLY REALLY REALLY
bad idea) and it then becomes their responsibility to make sure the
map has the keys. If you fail to place the appropriate keys in the map
it should stand that you are using the map improperly. I think it is
important for us to maintain behavior similar between beans and maps
(as much as is possible).

As a parting shot... you guys should NOT be using maps as extensively
as you are. They were meant to be an exception NOT a rule.

Brandon



On Tue, 8 Feb 2005 11:06:12 +0100 (CET), Dimiter Kapitanov (JIRA)
<[email protected]> wrote:
>      [ 
> http://issues.apache.org/jira/browse/IBATIS-51?page=comments#action_58749 ]
> 
> Dimiter Kapitanov commented on IBATIS-51:
> -----------------------------------------
> 
> Hello Clinton.
> Thank you for your reply. I understand what you meen, but let me explain the 
> other point of view.
> We have a project with HUGE domain model. We use Map as replacement of all 
> java-beans (yes I am serious). iBatis is perfect for this, because it doesn't 
> force us to use 'classic-only' things.
> Imagine this 3 possible cases :
> 
> 1) parameterClass : Map[key1=value1]
> iBatis : insert/update field 'key1' to new value.
> 
> 2) parameterClass : Map[key1=null]
> iBatis : clear the value of 'key1'.
> 
> 3) parameterClass : Map[key2=value2] (no property 'key1')
> iBatis : keep 'key1' as is, but update 'key2'.
> 
> If <isPropertyAvailable> works differently for Maps and JavaBeans properties, 
> we cannot distinguish case 2) and 3). Even <isNotNull> cannot help us in this 
> case.
> Please, consider again 'isPropertyAvailable' behaviour - for all these who 
> use Maps.
> 
> All the best,
> Dimiter
> 
> > Nulls interpretted incorrectly in version 2.0.9
> > -----------------------------------------------
> >
> >          Key: IBATIS-51
> >          URL: http://issues.apache.org/jira/browse/IBATIS-51
> >      Project: iBatis for Java
> >         Type: Bug
> >   Components: SQL Maps
> >     Versions: 2.0.9
> >  Environment: MySQL 3.23.x
> >     Reporter: Dimiter Kapitanov
> 
> >
> > When use HashMap as parameter class, SQL query is consturcted (with nulls) 
> > even for missing properties.
> > This is new bug, appeared in iBatis DBL 2.0.9 (it didn't exist in iBatis 
> > DBL 2.0.7).
> > Demonstration code :
> > -------------------------
> > [M.java]
> > import com.ibatis.sqlmap.client.SqlMapClient;
> > import com.ibatis.sqlmap.client.SqlMapClientBuilder;
> > import java.io.*;
> > import java.util.*;
> > /**
> >  * Test for bug in iBatis DBL 2.0.9.
> >  */
> > public class M
> > {
> >     public static void main(String[] args)
> >     {
> >         System.out.println("Testing iBatis DBL 2.0.9 bug : ");
> >         System.out.println("If you run this program with iBatis 2.0.7 it " +
> >             "will return result, if you run it with iBatis 2.0.9 it will " +
> >             "return null.");
> >
> >         try
> >         {
> >             String mapFile = "DB_Config.xml";
> >             Reader reader = new FileReader(mapFile);
> >             SqlMapClient mapper = SqlMapClientBuilder.buildSqlMapClient(
> >                 reader);
> >
> >             HashMap m = new HashMap();
> >             m.put("name", "Am");
> >             Map result = (Map)mapper.queryForObject("selectAccount", m);
> >
> >             System.out.println("Result = " + result);
> >         }
> >         catch (Exception exc)
> >         {
> >             exc.printStackTrace();
> >         }
> >     }
> > }
> > -------------------------
> > [DB_Config.xml]
> > <?xml version="1.0" encoding="UTF-8" standalone="no"?>
> > <!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" 
> > "http://www.ibatis.com/dtd/sql-map-config-2.dtd";>
> > <sqlMapConfig>
> >   <properties resource="debug.ini"/>
> >   <transactionManager type="JDBC">
> >     <dataSource type="SIMPLE">
> >       <property value="${DB_DRIVER}" name="JDBC.Driver"/>
> >       <property value="${DB_URL}" name="JDBC.ConnectionURL"/>
> >       <property value="${DB_USER}" name="JDBC.Username"/>
> >       <property value="${DB_PASSWORD}" name="JDBC.Password"/>
> >       <property value="${DB_QUERY}" name="Pool.PingQuery"/>
> >       <property value="15" name="Pool.MaximumActiveConnections"/>
> >       <property value="15" name="Pool.MaximumIdleConnections"/>
> >       <property value="1000" name="Pool.MaximumWait"/>
> >     </dataSource>
> >   </transactionManager>
> >   <sqlMap resource="Account.xml"/>
> >
> > </sqlMapConfig>
> > -------------------------
> > [Account.xml]
> > <?xml version="1.0" encoding="UTF-8" standalone="no"?>
> > <!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
> >  "http://www.ibatis.com/dtd/sql-map-2.dtd";>
> > <sqlMap>
> >     <statement id="selectAccount" parameterClass="java.util.HashMap" 
> > resultClass="java.util.HashMap">
> >         SELECT * FROM table1
> >         <dynamic prepend="WHERE">
> >         <isPropertyAvailable prepend="AND" property="id">
> >             id = #id#
> >         </isPropertyAvailable>
> >         <isPropertyAvailable prepend="AND" property="name">
> >             name = #name#
> >         </isPropertyAvailable>
> >         </dynamic>
> >         ORDER BY name
> >     </statement>
> > </sqlMap>
> > ---------------------
> > [debug.sql]
> > #
> > # testDB SQL script (uses MySQL 3.23.x).
> > #
> > CREATE DATABASE testDB;
> > GRANT ALL PRIVILEGES ON testDB.* TO 'testDB'@'localhost' IDENTIFIED BY 
> > 'testDB';
> > FLUSH PRIVILEGES;
> > use testDB;
> > CREATE TABLE table1 (
> >   id int unsigned NOT NULL auto_increment primary key,
> >   name varchar(20)
> > );
> > insert into table1 values (1, 'Am');
> > insert into table1 values (2, 'Tam');
> > ---------------------
> > [debug.ini]
> > #
> > # testDB settings.
> > #
> > DB_DRIVER=com.mysql.jdbc.Driver
> > DB_URL=jdbc:mysql://localhost/testDB?useUnicode=true
> > DB_USER=testDB
> > DB_PASSWORD=testDB
> > DB_QUERY=select 1 from table1
> 
> --
> This message is automatically generated by JIRA.
> -
> If you think it was sent incorrectly contact one of the administrators:
>    http://issues.apache.org/jira/secure/Administrators.jspa
> -
> If you want more information on JIRA, or have a bug to report see:
>    http://www.atlassian.com/software/jira
> 
>

Reply via email to