一对一
方法一:
使用resultType,定义订单信息po类,此po类中包括了订单信息和用户信息:
public class OrdersCustom extends Orders {
private String username;// 用户名称
private String address;// 用户地址
get/set。。。。
OrdersCustom类继承Orders类后OrdersCustom类包括了Orders类的所有字段,只需要定义用户的信息字段即可。
sql语句的写法
<select id="findOrdersList" resultType="cn.qf.mybatis.po.OrdersCustom">
SELECT
orders.*,
user.username,
user.address
FROM
orders, user
WHERE orders.user_id = user.id
</select>
方法二:
使用resultMap,定义专门的resultMap用于映射一对一查询结果。
在Orders类中加入User属性,user属性中用于存储关联查询的用户信息,因为订单关联查询用户是一对一关系,所以这里使用单个User对象存储关联查询的用户信息。
XML文件
association:表示进行关联查询单条记录
property:表示关联查询的结果存储在cn.qf.mybatis.po.Orders的user属性中
javaType:表示关联查询的结果类型
autoMapping="true" : 自动映射,不需要写<result column="xxx" property="xxx"/>,注意两张表的主键名不能相同
<id property="id" column="user_id"/>:查询结果的user_id列对应关联对象的id属性,这里是<id />表示user_id是关联查询对象的唯一标识。
<result property="username" column="username"/>:查询结果的username列对应关联对象的username属性。
<!-- 查询订单关联用户信息使用resultmap -->
<resultMap type="cn.qf.po.Orders" id="orderUserResultMap">
<id column="id" property="id"/>
<result column="user_id" property="userId"/>
<result column="number" property="number"/>
<result column="createtime" property="createtime"/>
<result column="note" property="note"/>
<!-- 一对一关联映射 -->
<!--
property:Orders对象的user属性
javaType:user属性对应的类型
-->
<association property="user" javaType="cn.qf.po.User">
<!-- column:user表的主键对应的列 property:user对象中id属性-->
<id column="user_id" property="id"/>
<result column="username" property="username"/>
<result column="address" property="address"/>
</association>
</resultMap>
<select id="findOrdersWithUserResultMap" resultMap="orderUserResultMap">
SELECT
o.id,
o.user_id,
o.number,
o.createtime,
o.note,
u.username,
u.address
FROM
orders o
JOIN `user` u ON u.id = o.user_id
</select>
一对多
<select id="selectUsersWithOrders" parameterType="long" resultMap="UsersOrdersMap">
select * from users as u left outer join orders as o on o.uid=u.uid where u.uid=#{uid}
</select>
<resultMap type="user" id="UsersOrdersMap" extends="userResultMap">
<!-- 配置关联集合
ofType:集合中的泛型的类型
-->
<collection property="orders" ofType="order" resultMap="orderResultMap"></collection>
</resultMap>