-
一对一、多对一
一对一/多对一都是使用association标签来进行关联,并制定javaType属性,定义resultMap接收查询结果
例如:查询订单的时候需要一并把用户信息查出来,一个订单对应一个用户,同时多个订单对应同一个用户,Order实体增加user属性
<select id="findAll" resultMap="orderMap"> SELECT *,U.`name`,U.address FROM `order` O LEFT JOIN `user` U ON O.uid = U.id </select>
<resultMap id="orderMap" type="com.rangers.entity.Order"> <result column="id" property="id"></result> <result column="time" property="time"></result> <result column="total" property="total"></result> <result column="uid" property="uid"></result> <association property="user" javaType="com.rangers.entity.User"> <result column="uid" property="id"></result> <result column="name" property="name"></result> <result column="address" property="address"></result> </association> </resultMap>
-
一对多
一对多使用collection标签进行关联,并指定ofType属性,主要在于在一方定义collection标签,定义resultMap接收查询结果
例如:一个用户对用多个订单,查询用户时把订单信息也查出来,User实体增加orderList属性
<select id="findAll" resultMap="userMap"> SELECT U.*,O.id oid,O.time,O.total FROM `user` U LEFT JOIN `order` O ON U.id = O.uid </select>
<resultMap id="userMap" type="com.rangers.entity.User"> <result column="id" property="id"></result> <result column="name" property="name"></result> <result column="address" property="address"></result> <collection property="orderList" ofType="com.rangers.entity.Order"> <result column="oid" property="id"></result> <result column="time" property="time"></result> <result column="total" property="total"></result> <result column="id" property="uid"></result> </collection> </resultMap>
-
多对多
多对多依然使用collection标签来进行关联,并指定ofType属性,在主查询表上定义collection标签,定义resultType接收查询结果
例如:一个用户对应多个角色,一个角色可以被多个用户使用,就是个经典的多对多关系,下面查询用户同时查询出该用户的所有角色,User实体增加roleList属性
<select id="findAllUserAndRole" resultMap="userRoleMap"> select u.*,r.rolename,r.id rid from user u left join user_role ur on u.id=ur.user_id inner join role r on ur.role_id=r.id; </select>
<resultMap id="userRoleMap" type="com.rangers.entity.User"> <result column="id" property="id"></result> <result column="name" property="name"></result> <result column="address" property="address"></result> <collection property="roleList" ofType="com.rangers.entity.Role"> <result column="rid" property="id"></result> <result column="rolename" property="rolename"></result> </collection> </resultMap>