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