Actually I solved it this way:

in my DAO code, I use a generic, ID and Name for key/value pair. Then in
my iBatis SQLMap I used aliases to rename my columns to what my DAO
expect.

<select id="..." resultClass="java.util.HashMap">
        select SKU is ID, Description as Name from Items
</select>

Now my DAO code is free again from Knowing how the tables are built.

Regards

Pascal

On Mon, 2005-01-24 at 09:22, Pascal DeMilly wrote:
> Thanks Larry,
> 
> I tried it and it works. However this still leave some dependencies in
> my DAO code as I have to specify the column names there as in:
> 
> return getSqlMapClientTemplate().queryForMap("getItemNameMap", null, "SKU", 
> "Description");
> 
> How will you do about moving that code into the SqlMap. Should I create
> a custom resultMap with key/value as properties and refer to it in my
> DAO code?
> 
> I am going to give it a try and see what happened.
> 
> Thanks for you help.
> 
> Pascal
> 
> On Mon, 2005-01-24 at 08:44, Larry Meadors wrote:
> > Try executeQueryForMap() instead.
> > 
> > 
> > On Mon, 24 Jan 2005 08:42:25 -0800, Pascal DeMilly
> > <[EMAIL PROTECTED]> wrote:
> > > Hi,
> > > 
> > > I would like to retrieve a Map with whose key is the 1st column of my
> > > query and the value is the 2nd column. For example right now I do:
> > > 
> > > <select id="getItemNameMap" resultClass="java.util.HashMap">
> > >         select SKU, Description from Items
> > > </select>
> > > 
> > > However this returns a list of maps with the key being the column name
> > > and the value the column value which seems wasteful in term of space (I
> > > am using remoting to retrieve that info).
> > > 
> > > I currently solve it by using a custom rowHandler in my DAO as follow:
> > > 
> > >     public Map getItemNames () throws DataAccessException {
> > >         final KeyValueHandler rowHandler = new KeyValueHandler ();
> > >         getSqlMapClientTemplate().queryWithRowHandler("getItemNameMap", 
> > > null, rowHandler);
> > >         return rowHandler.getMap();
> > >     }
> > > 
> > >     private class KeyValueHandler implements RowHandler {
> > >         final Map map = new HashMap ();
> > > 
> > >         public void handleRow(Object valueObject) {
> > >             final Map row = (Map) valueObject;
> > >             map.put (row.get("SKU"), row.get("Description"));
> > >         }
> > > 
> > >         public Map getMap () {
> > >             return map;
> > >         }
> > > 
> > >     }
> > > 
> > > But I would like to move possibly that code out of my DAO code and into
> > > iBatis SqlMap file.
> > > 
> > > How could I do that
> > > 
> > > TIA
> > > 
> > > Pascal
> > > 
> > >
> 

Reply via email to