**
一对一查询
**
1.一对一 resultType实现
查找某个订单id的信息,包括用户名字和地址 关联查询 一个订单只属于一个用户 一对一关系
通过id关联用户表和订单表
订单类
public class Orders {
private Integer id;
private Integer user_id;
private String node; //备注
private String number;
private Date createtime;
订单的扩展类,继承订单类
public class OrdersExt extends Orders{
private String username;
private String address;
<select id="findOrderById" parameterType="int" resultType="ordersExt">
select
o.*,u.username,u.address
from
orders o , user u
where
o.user_id = u.id
and
o.id = #{id}
</select>
2.一对一 resultMap实现
如果模型类里面包含有模型,则用resultMap
例如:orders中有user模型属性
用户模型
public class User implements Serializable {
private int id;
private String username;// 用户姓名
private String sex;// 性别
private Date birthday;// 生日
private String address;// 地址
订单模型,里面包含用户模型
public class Orders {
private Integer id;
private Integer user_id;
private String node; //备注
private String number;
private Date createtime;
private User user;//订单所属的用户
则:
<!--如果模型里有模型,使用resultMap-->
<resultMap id="orderRslMap" type="orders">
<!-- 往orders的模型匹配数据-->
<id column="id" property="id"></id>
<result column="node" property="node"></result>
<result column="number" property="number"></result>
<result column="createtime" property="createtime"></result>
<!-- 往orders的user匹配数据-->
<association property="user" javaType="user"> <!--前一个user指属性,后一个user指模型-->
<id column="user_id" property="id"></id>
<result column="username" property="username"></result>
<result column="address" property="address"></result>
</association>
</resultMap>
<select id="findOrderById2" parameterType="int" resultMap="orderRslMap">
select
o.*,u.username,u.address
from
orders o , user u
where
o.user_id = u.id
and
o.id = #{id}
</select>
一对多查询
根据订单id查找订单信息、用户信息和订单明细信息
可通过collection来实现
public class Orders {
private Integer id;
private Integer user_id;
private String node; //备注
private String number;
private Date createtime;
private User user;//订单所属的用户
//一对多数据封装 一个订单里面有多个详情
private List<OrderDetail> orderDetails;
如果模型里面包含的是集合类的模型
扫描二维码关注公众号,回复:
9191412 查看本文章
<resultMap id="orderRslMap3" type="orders">
<!-- 往orders的模型匹配数据-->
<id column="id" property="id"></id>
<result column="node" property="node"></result>
<result column="number" property="number"></result>
<result column="createtime" property="createtime"></result>
<!-- 往orders的user匹配数据-->
<association property="user" javaType="user"> <!--前一个user指属性,后一个user指模型-->
<id column="user_id" property="id"></id>
<result column="username" property="username"></result>
<result column="address" property="address"></result>
</association>
<!-- 往orders的orderdetail匹配数据-->
<collection property="orderDetails" ofType="orderDetail"> <!--注意后一个类型选ofType:里面填的是类的类型,也不是填list-->
<id column="detail_id" property="id"></id>
<result column="items_id" property="itemsId"></result>
<result column="items_num" property="itemsNum"></result>
</collection>
</resultMap>
<select id="findOrderById3" parameterType="int" resultMap="orderRslMap3">
select
o.*,
u.username,
u.address,
od.id detail_id,
od.items_id,
od.items_num
from
orders o,
user u,
orderdetail od
where
o.user_id=u.id
and
o.id=od.orders_id
and
o.id=#{id}
</select>
多对多查询
查询用户信息及用户购买的商品信息,要求将关联信息映射到主pojo的pojo属性中
映射思路:
①.将用户信息映射到user中。
②.在user类中添加订单列表属性List orderslist,将用户创建的订单映射到orderslist
③在Orders中添加订单明细列表属性List detailList,将订单的明细映射到detailList
④.在Orderdetail中添加Items属性,将订单明细所对应的商品映射到Items
<!--查询用户信息,及用户购买的商品信息 多对多查询-->
<resultMap id="userAndOrderRslMap" type="user">
<!--1.匹配user属性-->
<id column="id" property="id"></id>
<result column="username" property="username"></result>
<result column="address" property="address"></result>
<!--2.匹配user里的orderList-->
<collection property="ordersList" ofType="orders">
<id column="order_id" property="id"></id>
<result column="number" property="number"></result>
<result column="createtime" property="createtime"></result>
<result column="node" property="node"></result>
<!--3.匹配orders里面有orderDetails-->
<collection property="orderDetails" ofType="orderDetail">
<id column="detail_id" property="id"></id>
<id column="items_id" property="itemsId"></id>
<result column="items_num" property="itemsNum"></result>
<!--4.匹配orderDetail中的item-->
<association property="items" javaType="items">
<id column="items_id" property="id"></id>
<result column="name" property="name"></result>
<result column="price" property="price"></result>
<result column="detail" property="detail"></result>
</association>
</collection>
</collection>
</resultMap>
<select id="findUserAndOrderInfo" resultMap="userAndOrderRslMap" >
SELECT
u.id,
u.username,
u.address,
o.id order_id,
o.number,
o.createtime,
o.note,
od.id detail_id,
od.items_id,
od.items_num,
it.name,
it.price,
it.detail
FROM
user u,
orders o,
orderdetail od,
items it
WHERE
o.user_id = u.id
AND o.id = od.orders_id
AND od.items_id = it.id
</select>
</mapper>
测试类
@Test
public void test4(){
OrderMapper orderMapper = session.getMapper(OrderMapper.class);
List<User> users = orderMapper.findUserAndOrderInfo();
for (User user:users
) {
System.out.println("用户信息:"+user);
for (Orders order:user.getOrdersList()
) {
System.out.println("订单信息:"+order);
for (OrderDetail od: order.getOrderDetails()
) {
System.out.println("订单详细信息:"+od);
System.out.println("商品信息:"+od.getItems());
}
System.out.println("*****************************************");
}
}
}