You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-java@ibatis.apache.org by Ersin Er <er...@cs.hacettepe.edu.tr> on 2005/06/07 02:55:36 UTC
groupBy
Hi,
What is the porpose of "groupBy" attribute used in the SQL Mapper doc for
"Complex Collection Properties" subject? It says "The important items here
are the groupBy="quarter" attribute.." but it doesn't say why. I've tried
my own example for 1:M relations and I did not the effect of groupBy
attribute clearly. (After a few examples, a new sample doc will come.. :)
)
Thanks.
--
Ersin
Re: groupBy
Posted by Brandon Goodin <br...@gmail.com>.
file a JIRA issue on that and we'll update the docs.
Thanks for your insight on this.
Brandon
On 6/8/05, Ersin Er <er...@cs.hacettepe.edu.tr> wrote:
> The main problem with the developer guide for Complex List Properties
> section was
>
> 1) The example uses groupBy attribute value as the table column name
> which is same as class property. I thought its value comes from table
> column. It the table column's and class property's names were different
> it would be much more easier to understand.
> 2) The example query was also a groupBy query. So I thought that groupBy
> attribute in the mapping xml has some relation with the query itself.
>
> I think these are important points that makes the document hard to
> understand for a newbea.
>
> Cheers,
> Ersin
>
> Ersin Er wrote:
>
> > Hi,
> >
> > Thanks for the detailed reply. Today, I have implemented a similar
> > example and understood the concept. I've realized that groupBy
> > attribute take the related key from the "class property", not db table
> > column. When I've tried the table column as the value of the groupBy,
> > it worked without any exeptions but with silly results. Every row was
> > mapped with a category, however there were 9 rows and 3 categories.
> > Isn't it possible for SQL Mapper to determine if the value of the
> > groupBy really maps with an existing property?
> >
> > By the last example everything (ofcourse in the context of groupBy :)
> > ) became more clear.
> >
> > And one more question. As I see, you prefer to put a product list to
> > category class, but you do not prefer to put a category reference to
> > product class. Is this the prefered way to implement this kind of
> > relationships especially where circular dependencies exist?
> >
> > Thanks.
> >
> > -- Ersin
> >
> > Brandon Goodin wrote:
> >
> >> The real issue that is addressed with the groupBy is the ability to
> >> use a single query for populating complex properties mapped in the
> >> resultMap with the <result...resultMap="..."/> tag. In the past you
> >> would be required to map to a statement with the select attribute of
> >> the result tag which meant multiple additional queries and redundant
> >> object population. There were other strategies that were just as
> >> inneficient. The groupBy eliminates this by allowing you to specify
> >> the repeating property that will identify this object and populate the
> >> class defined in the resultMap. Further you can chain multiple
> >> resultMaps using the <result...resultMap="..."/> tag and map any
> >> number of objects with groupBy using the same select results.
> >>
> >> Following is a sample Clinton posted from the unit tests a while back.
> >> It may help you to understand groupBy better:
> >>
> >> <resultMap id="categoryResult" class="testdomain.Category"
> >> groupBy="categoryId">
> >> <result property="categoryId" column="catid"/>
> >> <result property="name" column="name"/>
> >> <result property="description" column="descn"/>
> >> <result property="productList" resultMap="productResult"/>
> >> </resultMap>
> >>
> >> <resultMap id="productResult" class="testdomain.Product"
> >> groupBy="productId">
> >> <result property="productId" column="productid"/>
> >> <result property="categoryId" column="category"/>
> >> <result property="name" column="name"/>
> >> <result property="description" column="descn"/>
> >> <result property="itemList" resultMap="itemResult"/>
> >> </resultMap>
> >>
> >> <resultMap id="itemResult" class="testdomain.Item">
> >> <result property="itemId" column="itemid"/>
> >> <result property="productId" column="productid"/>
> >> <result property="listPrice" column="listprice"/>
> >> <result property="unitCost" column="unitcost"/>
> >> <result property="supplierId" column="supplier"/>
> >> <result property="status" column="status"/>
> >> <result property="attribute1" column="attr1"/>
> >> <result property="quantity" column="qty"/>
> >> </resultMap>
> >>
> >> <select id="getAllCategories" resultMap="categoryResult" >
> >> select *
> >> from category c, product p, item i, inventory v
> >> where c.catid = p.category
> >> and p.productid = i.productid
> >> and i.itemid = v.itemid
> >> </select>
> >>
> >> <select id="getFish" resultMap="categoryResult" >
> >> select *
> >> from category c, product p, item i, inventory v
> >> where c.catid = p.category
> >> and p.productid = i.productid
> >> and i.itemid = v.itemid
> >> and c.catid = 'FISH'
> >> </select>
> >>
> >>
> >> On 6/8/05, Ersin Er <er...@cs.hacettepe.edu.tr> wrote:
> >>
> >>
> >>> Brandon Goodin wrote:
> >>>
> >>>
> >>>
> >>>> This will help you:
> >>>> http://opensource.atlassian.com/confluence/oss/display/IBATIS/How+do+I+get+around+the+N+Plus+1+selects+problem%3F
> >>>>
> >>>>
> >>>>
> >>>>
> >>>
> >>> Infact, the document is the same as the Developer's Guide. What a pity,
> >>> it did not help me. Anyway, I'm trying and learning myself.
> >>>
> >>> The groupBy attribute's value is a class property, not a table column,
> >>> right?
> >>>
> >>>
> >>>
> >>>> On 6/6/05, Ersin Er <er...@cs.hacettepe.edu.tr> wrote:
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>> Hi,
> >>>>>
> >>>>> What is the porpose of "groupBy" attribute used in the SQL Mapper
> >>>>> doc for
> >>>>> "Complex Collection Properties" subject? It says "The important
> >>>>> items here
> >>>>> are the groupBy="quarter" attribute.." but it doesn't say why.
> >>>>> I've tried
> >>>>> my own example for 1:M relations and I did not the effect of groupBy
> >>>>> attribute clearly. (After a few examples, a new sample doc will
> >>>>> come.. :)
> >>>>> )
> >>>>>
> >>>>> Thanks.
> >>>>>
> >>>>> --
> >>>>> Ersin
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>
> >>>
> >>>
> >>
> >
>
>
>
Re: groupBy
Posted by Ersin Er <er...@cs.hacettepe.edu.tr>.
The main problem with the developer guide for Complex List Properties
section was
1) The example uses groupBy attribute value as the table column name
which is same as class property. I thought its value comes from table
column. It the table column's and class property's names were different
it would be much more easier to understand.
2) The example query was also a groupBy query. So I thought that groupBy
attribute in the mapping xml has some relation with the query itself.
I think these are important points that makes the document hard to
understand for a newbea.
Cheers,
Ersin
Ersin Er wrote:
> Hi,
>
> Thanks for the detailed reply. Today, I have implemented a similar
> example and understood the concept. I've realized that groupBy
> attribute take the related key from the "class property", not db table
> column. When I've tried the table column as the value of the groupBy,
> it worked without any exeptions but with silly results. Every row was
> mapped with a category, however there were 9 rows and 3 categories.
> Isn't it possible for SQL Mapper to determine if the value of the
> groupBy really maps with an existing property?
>
> By the last example everything (ofcourse in the context of groupBy :)
> ) became more clear.
>
> And one more question. As I see, you prefer to put a product list to
> category class, but you do not prefer to put a category reference to
> product class. Is this the prefered way to implement this kind of
> relationships especially where circular dependencies exist?
>
> Thanks.
>
> -- Ersin
>
> Brandon Goodin wrote:
>
>> The real issue that is addressed with the groupBy is the ability to
>> use a single query for populating complex properties mapped in the
>> resultMap with the <result...resultMap="..."/> tag. In the past you
>> would be required to map to a statement with the select attribute of
>> the result tag which meant multiple additional queries and redundant
>> object population. There were other strategies that were just as
>> inneficient. The groupBy eliminates this by allowing you to specify
>> the repeating property that will identify this object and populate the
>> class defined in the resultMap. Further you can chain multiple
>> resultMaps using the <result...resultMap="..."/> tag and map any
>> number of objects with groupBy using the same select results.
>>
>> Following is a sample Clinton posted from the unit tests a while back.
>> It may help you to understand groupBy better:
>>
>> <resultMap id="categoryResult" class="testdomain.Category"
>> groupBy="categoryId">
>> <result property="categoryId" column="catid"/>
>> <result property="name" column="name"/>
>> <result property="description" column="descn"/>
>> <result property="productList" resultMap="productResult"/>
>> </resultMap>
>>
>> <resultMap id="productResult" class="testdomain.Product"
>> groupBy="productId">
>> <result property="productId" column="productid"/>
>> <result property="categoryId" column="category"/>
>> <result property="name" column="name"/>
>> <result property="description" column="descn"/>
>> <result property="itemList" resultMap="itemResult"/>
>> </resultMap>
>>
>> <resultMap id="itemResult" class="testdomain.Item">
>> <result property="itemId" column="itemid"/>
>> <result property="productId" column="productid"/>
>> <result property="listPrice" column="listprice"/>
>> <result property="unitCost" column="unitcost"/>
>> <result property="supplierId" column="supplier"/>
>> <result property="status" column="status"/>
>> <result property="attribute1" column="attr1"/>
>> <result property="quantity" column="qty"/>
>> </resultMap>
>>
>> <select id="getAllCategories" resultMap="categoryResult" >
>> select *
>> from category c, product p, item i, inventory v
>> where c.catid = p.category
>> and p.productid = i.productid
>> and i.itemid = v.itemid
>> </select>
>>
>> <select id="getFish" resultMap="categoryResult" >
>> select *
>> from category c, product p, item i, inventory v
>> where c.catid = p.category
>> and p.productid = i.productid
>> and i.itemid = v.itemid
>> and c.catid = 'FISH'
>> </select>
>>
>>
>> On 6/8/05, Ersin Er <er...@cs.hacettepe.edu.tr> wrote:
>>
>>
>>> Brandon Goodin wrote:
>>>
>>>
>>>
>>>> This will help you:
>>>> http://opensource.atlassian.com/confluence/oss/display/IBATIS/How+do+I+get+around+the+N+Plus+1+selects+problem%3F
>>>>
>>>>
>>>>
>>>>
>>>
>>> Infact, the document is the same as the Developer's Guide. What a pity,
>>> it did not help me. Anyway, I'm trying and learning myself.
>>>
>>> The groupBy attribute's value is a class property, not a table column,
>>> right?
>>>
>>>
>>>
>>>> On 6/6/05, Ersin Er <er...@cs.hacettepe.edu.tr> wrote:
>>>>
>>>>
>>>>
>>>>
>>>>> Hi,
>>>>>
>>>>> What is the porpose of "groupBy" attribute used in the SQL Mapper
>>>>> doc for
>>>>> "Complex Collection Properties" subject? It says "The important
>>>>> items here
>>>>> are the groupBy="quarter" attribute.." but it doesn't say why.
>>>>> I've tried
>>>>> my own example for 1:M relations and I did not the effect of groupBy
>>>>> attribute clearly. (After a few examples, a new sample doc will
>>>>> come.. :)
>>>>> )
>>>>>
>>>>> Thanks.
>>>>>
>>>>> --
>>>>> Ersin
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>
>>>
>>
>
Re: groupBy
Posted by Brandon Goodin <br...@gmail.com>.
sorry, for my engrish. I should have read that a second time.
Try #2
You can solve the "circular" with the groupBy. Depending on the
direction of your query.
If you query from the category then you want to populate the list of
products. If
you query from the Product you want to populate the Category and this
can be accomplished with the groupBy. But, in this approach it is not
really resolving a circular. Because the queries are directional and
avoid the circular.
Brandon
On 6/8/05, Brandon Goodin <br...@gmail.com> wrote:
> you could solve it this way depending on the direction of your query.
> If you query from the category then you want to populatte the list. If
> you query from the Product you want to populate the Category and this
> can be accomplished with the groupBy.
>
> Brandon
>
> On 6/8/05, Ersin Er <er...@cs.hacettepe.edu.tr> wrote:
> > Hi,
> >
> > Thanks for the detailed reply. Today, I have implemented a similar
> > example and understood the concept. I've realized that groupBy attribute
> > take the related key from the "class property", not db table column.
> > When I've tried the table column as the value of the groupBy, it worked
> > without any exeptions but with silly results. Every row was mapped with
> > a category, however there were 9 rows and 3 categories. Isn't it
> > possible for SQL Mapper to determine if the value of the groupBy really
> > maps with an existing property?
> >
> > By the last example everything (ofcourse in the context of groupBy :) )
> > became more clear.
> >
> > And one more question. As I see, you prefer to put a product list to
> > category class, but you do not prefer to put a category reference to
> > product class. Is this the prefered way to implement this kind of
> > relationships especially where circular dependencies exist?
> >
> > Thanks.
> >
> > -- Ersin
> >
> > Brandon Goodin wrote:
> >
> > >The real issue that is addressed with the groupBy is the ability to
> > >use a single query for populating complex properties mapped in the
> > >resultMap with the <result...resultMap="..."/> tag. In the past you
> > >would be required to map to a statement with the select attribute of
> > >the result tag which meant multiple additional queries and redundant
> > >object population. There were other strategies that were just as
> > >inneficient. The groupBy eliminates this by allowing you to specify
> > >the repeating property that will identify this object and populate the
> > >class defined in the resultMap. Further you can chain multiple
> > >resultMaps using the <result...resultMap="..."/> tag and map any
> > >number of objects with groupBy using the same select results.
> > >
> > >Following is a sample Clinton posted from the unit tests a while back.
> > >It may help you to understand groupBy better:
> > >
> > ><resultMap id="categoryResult" class="testdomain.Category"
> > >groupBy="categoryId">
> > > <result property="categoryId" column="catid"/>
> > > <result property="name" column="name"/>
> > > <result property="description" column="descn"/>
> > > <result property="productList" resultMap="productResult"/>
> > > </resultMap>
> > >
> > > <resultMap id="productResult" class="testdomain.Product" groupBy="productId">
> > > <result property="productId" column="productid"/>
> > > <result property="categoryId" column="category"/>
> > > <result property="name" column="name"/>
> > > <result property="description" column="descn"/>
> > > <result property="itemList" resultMap="itemResult"/>
> > > </resultMap>
> > >
> > > <resultMap id="itemResult" class="testdomain.Item">
> > > <result property="itemId" column="itemid"/>
> > > <result property="productId" column="productid"/>
> > > <result property="listPrice" column="listprice"/>
> > > <result property="unitCost" column="unitcost"/>
> > > <result property="supplierId" column="supplier"/>
> > > <result property="status" column="status"/>
> > > <result property="attribute1" column="attr1"/>
> > > <result property="quantity" column="qty"/>
> > > </resultMap>
> > >
> > > <select id="getAllCategories" resultMap="categoryResult" >
> > > select *
> > > from category c, product p, item i, inventory v
> > > where c.catid = p.category
> > > and p.productid = i.productid
> > > and i.itemid = v.itemid
> > > </select>
> > >
> > > <select id="getFish" resultMap="categoryResult" >
> > > select *
> > > from category c, product p, item i, inventory v
> > > where c.catid = p.category
> > > and p.productid = i.productid
> > > and i.itemid = v.itemid
> > > and c.catid = 'FISH'
> > > </select>
> > >
> > >
> > >On 6/8/05, Ersin Er <er...@cs.hacettepe.edu.tr> wrote:
> > >
> > >
> > >>Brandon Goodin wrote:
> > >>
> > >>
> > >>
> > >>>This will help you:
> > >>>http://opensource.atlassian.com/confluence/oss/display/IBATIS/How+do+I+get+around+the+N+Plus+1+selects+problem%3F
> > >>>
> > >>>
> > >>>
> > >>>
> > >>Infact, the document is the same as the Developer's Guide. What a pity,
> > >>it did not help me. Anyway, I'm trying and learning myself.
> > >>
> > >>The groupBy attribute's value is a class property, not a table column,
> > >>right?
> > >>
> > >>
> > >>
> > >>>On 6/6/05, Ersin Er <er...@cs.hacettepe.edu.tr> wrote:
> > >>>
> > >>>
> > >>>
> > >>>
> > >>>>Hi,
> > >>>>
> > >>>>What is the porpose of "groupBy" attribute used in the SQL Mapper doc for
> > >>>>"Complex Collection Properties" subject? It says "The important items here
> > >>>>are the groupBy="quarter" attribute.." but it doesn't say why. I've tried
> > >>>>my own example for 1:M relations and I did not the effect of groupBy
> > >>>>attribute clearly. (After a few examples, a new sample doc will come.. :)
> > >>>>)
> > >>>>
> > >>>>Thanks.
> > >>>>
> > >>>>--
> > >>>>Ersin
> > >>>>
> > >>>>
> > >>>>
> > >>>>
> > >>>>
> > >>
> > >>
> > >>
> >
> >
> >
>
Re: groupBy
Posted by Brandon Goodin <br...@gmail.com>.
you could solve it this way depending on the direction of your query.
If you query from the category then you want to populatte the list. If
you query from the Product you want to populate the Category and this
can be accomplished with the groupBy.
Brandon
On 6/8/05, Ersin Er <er...@cs.hacettepe.edu.tr> wrote:
> Hi,
>
> Thanks for the detailed reply. Today, I have implemented a similar
> example and understood the concept. I've realized that groupBy attribute
> take the related key from the "class property", not db table column.
> When I've tried the table column as the value of the groupBy, it worked
> without any exeptions but with silly results. Every row was mapped with
> a category, however there were 9 rows and 3 categories. Isn't it
> possible for SQL Mapper to determine if the value of the groupBy really
> maps with an existing property?
>
> By the last example everything (ofcourse in the context of groupBy :) )
> became more clear.
>
> And one more question. As I see, you prefer to put a product list to
> category class, but you do not prefer to put a category reference to
> product class. Is this the prefered way to implement this kind of
> relationships especially where circular dependencies exist?
>
> Thanks.
>
> -- Ersin
>
> Brandon Goodin wrote:
>
> >The real issue that is addressed with the groupBy is the ability to
> >use a single query for populating complex properties mapped in the
> >resultMap with the <result...resultMap="..."/> tag. In the past you
> >would be required to map to a statement with the select attribute of
> >the result tag which meant multiple additional queries and redundant
> >object population. There were other strategies that were just as
> >inneficient. The groupBy eliminates this by allowing you to specify
> >the repeating property that will identify this object and populate the
> >class defined in the resultMap. Further you can chain multiple
> >resultMaps using the <result...resultMap="..."/> tag and map any
> >number of objects with groupBy using the same select results.
> >
> >Following is a sample Clinton posted from the unit tests a while back.
> >It may help you to understand groupBy better:
> >
> ><resultMap id="categoryResult" class="testdomain.Category"
> >groupBy="categoryId">
> > <result property="categoryId" column="catid"/>
> > <result property="name" column="name"/>
> > <result property="description" column="descn"/>
> > <result property="productList" resultMap="productResult"/>
> > </resultMap>
> >
> > <resultMap id="productResult" class="testdomain.Product" groupBy="productId">
> > <result property="productId" column="productid"/>
> > <result property="categoryId" column="category"/>
> > <result property="name" column="name"/>
> > <result property="description" column="descn"/>
> > <result property="itemList" resultMap="itemResult"/>
> > </resultMap>
> >
> > <resultMap id="itemResult" class="testdomain.Item">
> > <result property="itemId" column="itemid"/>
> > <result property="productId" column="productid"/>
> > <result property="listPrice" column="listprice"/>
> > <result property="unitCost" column="unitcost"/>
> > <result property="supplierId" column="supplier"/>
> > <result property="status" column="status"/>
> > <result property="attribute1" column="attr1"/>
> > <result property="quantity" column="qty"/>
> > </resultMap>
> >
> > <select id="getAllCategories" resultMap="categoryResult" >
> > select *
> > from category c, product p, item i, inventory v
> > where c.catid = p.category
> > and p.productid = i.productid
> > and i.itemid = v.itemid
> > </select>
> >
> > <select id="getFish" resultMap="categoryResult" >
> > select *
> > from category c, product p, item i, inventory v
> > where c.catid = p.category
> > and p.productid = i.productid
> > and i.itemid = v.itemid
> > and c.catid = 'FISH'
> > </select>
> >
> >
> >On 6/8/05, Ersin Er <er...@cs.hacettepe.edu.tr> wrote:
> >
> >
> >>Brandon Goodin wrote:
> >>
> >>
> >>
> >>>This will help you:
> >>>http://opensource.atlassian.com/confluence/oss/display/IBATIS/How+do+I+get+around+the+N+Plus+1+selects+problem%3F
> >>>
> >>>
> >>>
> >>>
> >>Infact, the document is the same as the Developer's Guide. What a pity,
> >>it did not help me. Anyway, I'm trying and learning myself.
> >>
> >>The groupBy attribute's value is a class property, not a table column,
> >>right?
> >>
> >>
> >>
> >>>On 6/6/05, Ersin Er <er...@cs.hacettepe.edu.tr> wrote:
> >>>
> >>>
> >>>
> >>>
> >>>>Hi,
> >>>>
> >>>>What is the porpose of "groupBy" attribute used in the SQL Mapper doc for
> >>>>"Complex Collection Properties" subject? It says "The important items here
> >>>>are the groupBy="quarter" attribute.." but it doesn't say why. I've tried
> >>>>my own example for 1:M relations and I did not the effect of groupBy
> >>>>attribute clearly. (After a few examples, a new sample doc will come.. :)
> >>>>)
> >>>>
> >>>>Thanks.
> >>>>
> >>>>--
> >>>>Ersin
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>
> >>
> >>
>
>
>
Re: groupBy
Posted by Ersin Er <er...@cs.hacettepe.edu.tr>.
Hi,
Thanks for the detailed reply. Today, I have implemented a similar
example and understood the concept. I've realized that groupBy attribute
take the related key from the "class property", not db table column.
When I've tried the table column as the value of the groupBy, it worked
without any exeptions but with silly results. Every row was mapped with
a category, however there were 9 rows and 3 categories. Isn't it
possible for SQL Mapper to determine if the value of the groupBy really
maps with an existing property?
By the last example everything (ofcourse in the context of groupBy :) )
became more clear.
And one more question. As I see, you prefer to put a product list to
category class, but you do not prefer to put a category reference to
product class. Is this the prefered way to implement this kind of
relationships especially where circular dependencies exist?
Thanks.
-- Ersin
Brandon Goodin wrote:
>The real issue that is addressed with the groupBy is the ability to
>use a single query for populating complex properties mapped in the
>resultMap with the <result...resultMap="..."/> tag. In the past you
>would be required to map to a statement with the select attribute of
>the result tag which meant multiple additional queries and redundant
>object population. There were other strategies that were just as
>inneficient. The groupBy eliminates this by allowing you to specify
>the repeating property that will identify this object and populate the
>class defined in the resultMap. Further you can chain multiple
>resultMaps using the <result...resultMap="..."/> tag and map any
>number of objects with groupBy using the same select results.
>
>Following is a sample Clinton posted from the unit tests a while back.
>It may help you to understand groupBy better:
>
><resultMap id="categoryResult" class="testdomain.Category"
>groupBy="categoryId">
> <result property="categoryId" column="catid"/>
> <result property="name" column="name"/>
> <result property="description" column="descn"/>
> <result property="productList" resultMap="productResult"/>
> </resultMap>
>
> <resultMap id="productResult" class="testdomain.Product" groupBy="productId">
> <result property="productId" column="productid"/>
> <result property="categoryId" column="category"/>
> <result property="name" column="name"/>
> <result property="description" column="descn"/>
> <result property="itemList" resultMap="itemResult"/>
> </resultMap>
>
> <resultMap id="itemResult" class="testdomain.Item">
> <result property="itemId" column="itemid"/>
> <result property="productId" column="productid"/>
> <result property="listPrice" column="listprice"/>
> <result property="unitCost" column="unitcost"/>
> <result property="supplierId" column="supplier"/>
> <result property="status" column="status"/>
> <result property="attribute1" column="attr1"/>
> <result property="quantity" column="qty"/>
> </resultMap>
>
> <select id="getAllCategories" resultMap="categoryResult" >
> select *
> from category c, product p, item i, inventory v
> where c.catid = p.category
> and p.productid = i.productid
> and i.itemid = v.itemid
> </select>
>
> <select id="getFish" resultMap="categoryResult" >
> select *
> from category c, product p, item i, inventory v
> where c.catid = p.category
> and p.productid = i.productid
> and i.itemid = v.itemid
> and c.catid = 'FISH'
> </select>
>
>
>On 6/8/05, Ersin Er <er...@cs.hacettepe.edu.tr> wrote:
>
>
>>Brandon Goodin wrote:
>>
>>
>>
>>>This will help you:
>>>http://opensource.atlassian.com/confluence/oss/display/IBATIS/How+do+I+get+around+the+N+Plus+1+selects+problem%3F
>>>
>>>
>>>
>>>
>>Infact, the document is the same as the Developer's Guide. What a pity,
>>it did not help me. Anyway, I'm trying and learning myself.
>>
>>The groupBy attribute's value is a class property, not a table column,
>>right?
>>
>>
>>
>>>On 6/6/05, Ersin Er <er...@cs.hacettepe.edu.tr> wrote:
>>>
>>>
>>>
>>>
>>>>Hi,
>>>>
>>>>What is the porpose of "groupBy" attribute used in the SQL Mapper doc for
>>>>"Complex Collection Properties" subject? It says "The important items here
>>>>are the groupBy="quarter" attribute.." but it doesn't say why. I've tried
>>>>my own example for 1:M relations and I did not the effect of groupBy
>>>>attribute clearly. (After a few examples, a new sample doc will come.. :)
>>>>)
>>>>
>>>>Thanks.
>>>>
>>>>--
>>>>Ersin
>>>>
>>>>
>>>>
>>>>
>>>>
>>
>>
>>
Re: groupBy
Posted by Brandon Goodin <br...@gmail.com>.
The real issue that is addressed with the groupBy is the ability to
use a single query for populating complex properties mapped in the
resultMap with the <result...resultMap="..."/> tag. In the past you
would be required to map to a statement with the select attribute of
the result tag which meant multiple additional queries and redundant
object population. There were other strategies that were just as
inneficient. The groupBy eliminates this by allowing you to specify
the repeating property that will identify this object and populate the
class defined in the resultMap. Further you can chain multiple
resultMaps using the <result...resultMap="..."/> tag and map any
number of objects with groupBy using the same select results.
Following is a sample Clinton posted from the unit tests a while back.
It may help you to understand groupBy better:
<resultMap id="categoryResult" class="testdomain.Category"
groupBy="categoryId">
<result property="categoryId" column="catid"/>
<result property="name" column="name"/>
<result property="description" column="descn"/>
<result property="productList" resultMap="productResult"/>
</resultMap>
<resultMap id="productResult" class="testdomain.Product" groupBy="productId">
<result property="productId" column="productid"/>
<result property="categoryId" column="category"/>
<result property="name" column="name"/>
<result property="description" column="descn"/>
<result property="itemList" resultMap="itemResult"/>
</resultMap>
<resultMap id="itemResult" class="testdomain.Item">
<result property="itemId" column="itemid"/>
<result property="productId" column="productid"/>
<result property="listPrice" column="listprice"/>
<result property="unitCost" column="unitcost"/>
<result property="supplierId" column="supplier"/>
<result property="status" column="status"/>
<result property="attribute1" column="attr1"/>
<result property="quantity" column="qty"/>
</resultMap>
<select id="getAllCategories" resultMap="categoryResult" >
select *
from category c, product p, item i, inventory v
where c.catid = p.category
and p.productid = i.productid
and i.itemid = v.itemid
</select>
<select id="getFish" resultMap="categoryResult" >
select *
from category c, product p, item i, inventory v
where c.catid = p.category
and p.productid = i.productid
and i.itemid = v.itemid
and c.catid = 'FISH'
</select>
On 6/8/05, Ersin Er <er...@cs.hacettepe.edu.tr> wrote:
> Brandon Goodin wrote:
>
> >This will help you:
> >http://opensource.atlassian.com/confluence/oss/display/IBATIS/How+do+I+get+around+the+N+Plus+1+selects+problem%3F
> >
> >
> Infact, the document is the same as the Developer's Guide. What a pity,
> it did not help me. Anyway, I'm trying and learning myself.
>
> The groupBy attribute's value is a class property, not a table column,
> right?
>
> >On 6/6/05, Ersin Er <er...@cs.hacettepe.edu.tr> wrote:
> >
> >
> >>Hi,
> >>
> >>What is the porpose of "groupBy" attribute used in the SQL Mapper doc for
> >>"Complex Collection Properties" subject? It says "The important items here
> >>are the groupBy="quarter" attribute.." but it doesn't say why. I've tried
> >>my own example for 1:M relations and I did not the effect of groupBy
> >>attribute clearly. (After a few examples, a new sample doc will come.. :)
> >>)
> >>
> >>Thanks.
> >>
> >>--
> >>Ersin
> >>
> >>
> >>
>
>
>
Re: groupBy
Posted by Ron Grabowski <ro...@yahoo.com>.
You may find this thread helpful:
http://tinyurl.com/co6tt
http://www.mail-archive.com/ibatis-dev%40incubator.apache.org/msg01015.html
--- Ersin Er <er...@cs.hacettepe.edu.tr> wrote:
> Brandon Goodin wrote:
>
> >This will help you:
>
>http://opensource.atlassian.com/confluence/oss/display/IBATIS/How+do+I+get+around+the+N+Plus+1+selects+problem%3F
> >
> >
> Infact, the document is the same as the Developer's Guide. What a
> pity,
> it did not help me. Anyway, I'm trying and learning myself.
>
> The groupBy attribute's value is a class property, not a table
> column,
> right?
>
> >On 6/6/05, Ersin Er <er...@cs.hacettepe.edu.tr> wrote:
> >
> >
> >>Hi,
> >>
> >>What is the porpose of "groupBy" attribute used in the SQL Mapper
> doc for
> >>"Complex Collection Properties" subject? It says "The important
> items here
> >>are the groupBy="quarter" attribute.." but it doesn't say why. I've
> tried
> >>my own example for 1:M relations and I did not the effect of
> groupBy
> >>attribute clearly. (After a few examples, a new sample doc will
> come.. :)
> >>)
> >>
> >>Thanks.
> >>
> >>--
> >>Ersin
> >>
> >>
> >>
>
>
>
Re: groupBy
Posted by Ersin Er <er...@cs.hacettepe.edu.tr>.
Brandon Goodin wrote:
>This will help you:
>http://opensource.atlassian.com/confluence/oss/display/IBATIS/How+do+I+get+around+the+N+Plus+1+selects+problem%3F
>
>
Infact, the document is the same as the Developer's Guide. What a pity,
it did not help me. Anyway, I'm trying and learning myself.
The groupBy attribute's value is a class property, not a table column,
right?
>On 6/6/05, Ersin Er <er...@cs.hacettepe.edu.tr> wrote:
>
>
>>Hi,
>>
>>What is the porpose of "groupBy" attribute used in the SQL Mapper doc for
>>"Complex Collection Properties" subject? It says "The important items here
>>are the groupBy="quarter" attribute.." but it doesn't say why. I've tried
>>my own example for 1:M relations and I did not the effect of groupBy
>>attribute clearly. (After a few examples, a new sample doc will come.. :)
>>)
>>
>>Thanks.
>>
>>--
>>Ersin
>>
>>
>>
Re: groupBy
Posted by Brandon Goodin <br...@gmail.com>.
This will help you:
http://opensource.atlassian.com/confluence/oss/display/IBATIS/How+do+I+get+around+the+N+Plus+1+selects+problem%3F
On 6/6/05, Ersin Er <er...@cs.hacettepe.edu.tr> wrote:
> Hi,
>
> What is the porpose of "groupBy" attribute used in the SQL Mapper doc for
> "Complex Collection Properties" subject? It says "The important items here
> are the groupBy="quarter" attribute.." but it doesn't say why. I've tried
> my own example for 1:M relations and I did not the effect of groupBy
> attribute clearly. (After a few examples, a new sample doc will come.. :)
> )
>
> Thanks.
>
> --
> Ersin
>