一对多映射的返回值是集合
三种方法:
第一: 直接一对多 查询方式为关系查询关键字为collection
collection 的类型是ofType
<select id="userAndAdress2" resultMap="userAndAdressMap" parameterType="int">
select u.id, u.userName,u.phone,a.addressDesc,a.userId
from smbms_user u,smbms_address a where u.id=a.userId and u.id=#{id}
</select>
<resultMap id="userAndAdressMap" type="cn.cmbms.pojo.User">
<id property="id" column="id"></id>
<result property="userName" column="userName"></result>
<result property="phone" column="phone"></result>
<collection property="addresses" ofType="Address">
<result property="addressDesc" column="addressDesc"></result>
<result property="userId" column="userId"></result>
</collection>
</resultMap>
第二个:创建一个新的实体类去接收返回的参数
<select id="userAndAdress" resultType="UserAndAddress" parameterType="int">
select u.id, u.userName,u.phone,a.addressDesc
from smbms_user u,smbms_address a where u.id=a.userId and u.id=#{id}
</select>
第三中方法:采用子查询的方法建立关系映射 需要用到select 关键字
先查询主表的需要和从表连接的字段
如:(一个用户多个订单)
主表为用户表
从表为订单表
从用户表中查询将用户表的id作为参数传到从表的订单表
<select id="userAndAdress3" resultMap="userAndAdressMap3" parameterType="int">
select *
from smbms_user u where u.id=#{id}
</select>
<resultMap id="userAndAdressMap3" type="cn.cmbms.pojo.User">
<id property="id" column="id"></id>
<result property="userName" column="userName"></result>
<result property="phone" column="phone"></result>
<collection property="addresses" column="id" ofType="Address" **select=**"cn.cmbms.dao.user.AddressMapper.findAddressByUid">
<result property="addressDesc" column="addressDesc"></result>
</collection>
</resultMap>
cn.cmbms.dao.user.AddressMapper.findAddressByUid:
<mapper namespace="cn.cmbms.dao.user.AddressMapper">
<select id="findAddressByUid" parameterType="int" resultType="Address">
select * from smbms_address where userId=#{uid}
</select>
</mapper>