##下面是对应的xml文件,以及sql语句
<mapper namespace="com.rhit.dao">
<resultMap id="HouseMap" type="com.rhit.entity.House">
<id property="id" column="ID" />
<result property="title" column="TITLE" />
<result property="description" column="DESCRIPTION" />
<result property="price" column="PRICE" />
<result property="pubdate" column="PUBDATE" />
<result property="floorage" column="FLOORAGE" />
<result property="contact" column="CONTACT" />
<association property="types" javaType="Types">
<id property="id" column="ID" />
<result property="name" column="NAME" />
</association>
<association property="street" javaType="Street">
<id property="id" column="ID" />
<result property="name" column="NAME" />
</association>
<association property="users" javaType="Users">
<id property="id" column="ID" />
<result property="name" column="NAME" />
<result property="password" column="PASSWORD" />
<result property="telphone" column="TELEPHONE" />
<result property="username" column="USERNAME" />
<result property="isadmin" column="ISADMIN" />
</association>
</resultMap>
<select id="getHouse" resultMap="HouseMap">
select * from house h,users u,types t,street s where u.id=h.user_id and t.id=h.type_id and s.id=h.street_id
</select>
</mapper>
##下面是调用测试
public class Test {
public static void main(String[] args) {
SqlSession session=MyBatisUtil.getSession();
List<House> list=session.selectList("getHouse");
System.out.println(list.get(0).getStreet().getName());
System.out.println(list.get(0).getTypes().getName());
System.out.println(list.get(0).getUsers().getName());
}
}
##问题
1.测试结果只获取到了user的名字,而types和street的名字跟user的名字一样?
2.一个resultMap中可以有多个association么?这种多对多的关系该怎么处理?
3.一个resultMap可以有多个collection么?怎么写sql语句呢?
求大神么解答,在线等,先谢过!
1.配置多个一对一(association)的时候,默认执行第一个一对一,所以你取的结果都相同
2.resultMap中不可以有多个association,多对多关系可以修改表结构,配置成2个一对多的表来实现,
添加一个中间表,这样的话就可以通过collection标签来配置了
3.不可以啊,resultMap中只有一个collection,或者一个association.
sql语句和一对一类似,
//这里把user的id传过去
select="test.mybatis.dao.articleMapper.selectArticleListByUserId" />
以下省略,类同,Mybatis会把结果封装成List类型。
mybatis不能识别,数据表相同的字段,如你上面提到的name在几张表中同时出现,此时需要在 column中使用别名,来区别