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 AlexElba <ra...@yahoo.com> on 2009/03/31 02:37:47 UTC

Please help with mapping Ibatis

Hello,
I have a class

public class Part{
private Integer id; 
private String name;
private Bar bar;

....
getters/setters 
}

I have a mapping for part and for there part I am adding aliases for column
names after join.

I am sure it is not correct way to do it. Please advice how to do correct
way.

Current mapping looks like

  <resultMap id="part"
    class="domain.Part">
    <result property="name" column="name" />
    <result property="id" column="id" />
    <result property="bar" resultMap="part.bar" />
  </resultMap>


  <resultMap id="otherPart"
    class="domain.Part">
    <result property="name" column="otherName" />
    <result property="id" column="otherId" />
<result property="bar" resultMap="part.otherBar" />
  </resultMap>

SQL

select
p1.id,
p1.name,
b.*,
p1.id as otherId,
p1.name as otherName
from PART p1 
join BAR b on p1.id=b.p1Id
join PART p2 on p2.id=b.p2Id


Basically question is
How to map the objects if during the querying the same table is join more
then one time?



Thanks




-- 
View this message in context: http://www.nabble.com/Please-help-with-mapping-Ibatis-tp22796133p22796133.html
Sent from the iBATIS - User - Java mailing list archive at Nabble.com.


Re: Please help with mapping Ibatis

Posted by Ingmar Lötzsch <il...@asci-systemhaus.de>.
> So only way is to do with aliases?
> 
> No way I can reuse the already mapped dto other then remap it?

You can use the select attribute instead of resultMap. You can combine
this with lazy loading.

Ingmar

Re: Please help with mapping Ibatis

Posted by AlexElba <ra...@yahoo.com>.
So only way is to do with aliases?

No way I can reuse the already mapped dto other then remap it?



Ingmar Lötzsch wrote:
> 
>> I have a class
>> 
>> public class Part{
>> private Integer id; 
>> private String name;
>> private Bar bar;
>> 
>> ....
>> getters/setters 
>> }
>> 
>> I have a mapping for part and for there part I am adding aliases for
>> column
>> names after join.
>> 
>> I am sure it is not correct way to do it. Please advice how to do correct
>> way.
>> 
>> Current mapping looks like
>> 
>>   <resultMap id="part"
>>     class="domain.Part">
>>     <result property="name" column="name" />
>>     <result property="id" column="id" />
>>     <result property="bar" resultMap="part.bar" />
>>   </resultMap>
>> 
>> 
>>   <resultMap id="otherPart"
>>     class="domain.Part">
>>     <result property="name" column="otherName" />
>>     <result property="id" column="otherId" />
>> <result property="bar" resultMap="part.otherBar" />
>>   </resultMap>
>> 
>> SQL
>> 
>> select
>> p1.id,
>> p1.name,
>> b.*,
>> p1.id as otherId,
>> p1.name as otherName
>> from PART p1 
>> join BAR b on p1.id=b.p1Id
>> join PART p2 on p2.id=b.p2Id
>> 
>> 
>> Basically question is
>> How to map the objects if during the querying the same table is join more
>> then one time?
> 
> That depends on the object graph, you want to get. An entity
> relationship diagram or class diagram would be helpful. Supposed you have
> 
> Bar 1 -- 2 Part
> 
> and
> 
> Bar
> -part1 : Part
> -part2 : Part
> 
> and want to get a list of bars, you can do the following
> 
> <resultMap id="bar.result" resultClass="domain.Bar">
> 	<result property="part1" resultMap="part"/>
> 	<result property="part2" resultMap="otherPart"/>
> ...
> </resultMap>
> 
> <select id="bar.selectAll" resultMap="bar.result">
> 	select
> 	p1.id,
> 	p1.name,
> 	b.*,
> 	p1.id as otherId,
> 	p1.name as otherName
> 	from PART p1
> 	join BAR b on p1.id=b.p1Id
> 	join PART p2 on p2.id=b.p2Id
> </select>
> 
> List<Bar> list = getSqlMapClientTemplate().queryForList("bar.selectAll");
> 
> Ingmar
> 
> 

-- 
View this message in context: http://www.nabble.com/Please-help-with-mapping-Ibatis-tp22796133p22805239.html
Sent from the iBATIS - User - Java mailing list archive at Nabble.com.


Re: Please help with mapping Ibatis

Posted by Ingmar Lötzsch <il...@asci-systemhaus.de>.
> I have a class
> 
> public class Part{
> private Integer id; 
> private String name;
> private Bar bar;
> 
> ....
> getters/setters 
> }
> 
> I have a mapping for part and for there part I am adding aliases for column
> names after join.
> 
> I am sure it is not correct way to do it. Please advice how to do correct
> way.
> 
> Current mapping looks like
> 
>   <resultMap id="part"
>     class="domain.Part">
>     <result property="name" column="name" />
>     <result property="id" column="id" />
>     <result property="bar" resultMap="part.bar" />
>   </resultMap>
> 
> 
>   <resultMap id="otherPart"
>     class="domain.Part">
>     <result property="name" column="otherName" />
>     <result property="id" column="otherId" />
> <result property="bar" resultMap="part.otherBar" />
>   </resultMap>
> 
> SQL
> 
> select
> p1.id,
> p1.name,
> b.*,
> p1.id as otherId,
> p1.name as otherName
> from PART p1 
> join BAR b on p1.id=b.p1Id
> join PART p2 on p2.id=b.p2Id
> 
> 
> Basically question is
> How to map the objects if during the querying the same table is join more
> then one time?

That depends on the object graph, you want to get. An entity
relationship diagram or class diagram would be helpful. Supposed you have

Bar 1 -- 2 Part

and

Bar
-part1 : Part
-part2 : Part

and want to get a list of bars, you can do the following

<resultMap id="bar.result" resultClass="domain.Bar">
	<result property="part1" resultMap="part"/>
	<result property="part2" resultMap="otherPart"/>
...
</resultMap>

<select id="bar.selectAll" resultMap="bar.result">
	select
	p1.id,
	p1.name,
	b.*,
	p1.id as otherId,
	p1.name as otherName
	from PART p1
	join BAR b on p1.id=b.p1Id
	join PART p2 on p2.id=b.p2Id
</select>

List<Bar> list = getSqlMapClientTemplate().queryForList("bar.selectAll");

Ingmar