ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Utkarsh Ahuja" <ahuja.utka...@gmail.com>
Subject Re: Problem creating nested HashMaps using <result property="" column="" select=""/>
Date Wed, 28 Mar 2007 18:49:59 GMT
Dear Ted,

The hashtables in hashtables sounds like a really really bad idea
....:)....I can totally see that :). The Pojo's do seem to be the best way
to go and for the most part thats what I have been doing (The tried and
tested ofcourse). I am doing this as we want to create an independent
application that hits the same relational database however, we want to be
able to extract whatever we want from it without being tied down to the
POJO's(JasperReports) . Simply to eliminate the need for maintenance.

I did try to use XML earlier using ibatis but that did not work out too well
and it was really slow when I provided an xml document to JasperReports as a
datasource.

However, I did figure something out late last night. The way to do it is
something like this. Using groupBy and the resultMap and using a join in the
select statement

   <resultMap id="parentResultMap" class="java.util.HashMap"
groupBy="parentProperty1,parentProperty2,parentProperty3,parentProperty4,parentProperty5"
>
        <result column="parent_property_1" property="parentProperty1" />
        <result column="parent_property_2" property="parentProperty2" />
        <result column="parent_property_3" property="parentProperty3" />
        <result column="parent_property_4" property="parentProperty4" />
        <result column="parent_property_5" property="parentProperty5" />
        <result property="children" javaType="java.util.List" resultMap="
namespace.childResultMap"/>
    </resultMap>

   <resultMap id="childResultMap" class="java.util.HashMap">
        <result column="child_property_1" property="childProperty1" />
        <result column="child_property_2" property="childProperty2" />
        <result column="child_property_3" property="childProperty3" />
        <result column="parent_property_1" property="parentProperty1" />
    </resultMap>

<select id="parentChildMapReport" parameterClass="java.util.HashMap"
resultMap="parentResultMap">
        select
            p.parent_property_1,
            p.parent_property_2,
            p.parent_property_3,
            p.parent_property_4,
            p.parent_property_5,
            c.child_property_1,
            c.child_property_2,
            c.child_property_3,
            c.parent_property_1
        from parent p, child c
        where p.parent_property_1 = c.parent_property_1
    </select>

This worked and did solve our problem where we could just have a generic
object to hold the results and we were able to pass it as a datasource to
jasper reports. Performance wise hashtables work really really well(with
JasperReports).

Thanks
Utkarsh


On 3/28/07, Ted Schrader <teds.mailing.lists@gmail.com> wrote:
>
> I'm not sure about the ultimate answer, but I'm also not sure the
> following is valid:
>
> <result column="parent_column_1" property="children"
> resultMap="childResultMap" select="loadChildren"/>
>
> I believe the "resultMap" and "select" attributes are mutually
> exclusive  ("resultMap" for avoiding N+1 selects, and "select" for
> sub-selects, which in turn have their own resultMaps).
>
> Also, at risk of hijacking the thread, I just have to throw in my two
> cents:
>
> Call me a coward, but hashtables inside hashtables as a domain model
> frightens the living daylights out of me.  We've just inherited a web
> app that uses this "design pattern" and we quickly bestowed the
> honorable title of "trashtable" to the idiom.  Perhaps I'm just
> entrenched in my ways, but I prefer POJOs and the ability to really
> lean on the compiler (thus my biggest gripe about JSP/Struts tags).  I
> would love to hear about any compelling arguments for the hash-in-hash
> model in an off-topic thread.
>
> Ted
>
> On 27/03/07, Utkarsh Ahuja <ahuja.utkarsh@gmail.com> wrote:
> > Hi,
> > I am trying to create nested HashMaps something like
> >
> > ParentHashMap {
> >      ...... some key value pairs
> >      ......
> >      childHashMap....some key value pairs
> > }
> >
> > I am doing the following:
> >
> >      <resultMap id="parentResultMap" class="java.util.HashMap">
> >         <result column="parent_column_1" property="parentColumn1" />
> >         <result column="parent_column_1" property="parentColumn2" />
> >         <result column="parent_column_1" property="parentColumn3" />
> >         <!-- customizations -->
> >         <result column="parent_column_1" property="children"
> > resultMap="childResultMap" select="loadChildren"/>
> >     </resultMap>
> >
> >     <select id="loadParent" parameterClass="java.util.HashMap"
> > resultMap="parentResultMap">
> >         select
> >             parent_column_1,
> >             parent_column_2,
> >              parent_column_3
> >         from parent
> >     </select>
> >
> >     <resultMap id="childResultMap" class="java.util.HashMap">
> >         <result column="child_column_1" property="childColumn1" />
> >         <result column="child_column_2" property="childColumn2" />
> >         <result column="child_column_3" property="childColumn3" />
> >         <result column="parent_column_1" property="parentColumn1" />
> >     </resultMap>
> >
> >     <select id="loadChildren" resultMap="childResultMap">
> >         select
> >            child_column_1,
> >            child_column_2,
> >            child_column_3,
> >             parent_column_1
> >          from child
> >         where parent_column_1 = #parentColumn1:VARCHAR#
> >     </select>
> >
> > Can iBatis instantiate and create a HashMap within another HashMap and
> use
> > the property element as the key for it ?
> > <result column="parent_column_1" property="children"
> > resultMap="childResultMap" select="loadChildren"/>
> >
> > Thanks
> > Utkarsh
> >
> >
> >
> >
> >
> >
> >
> >
>

Mime
View raw message