Mybatis 一对一,一对多,多对一,多对多 的处理

一对一查询

1.1 需求

查询订单信息关联查询用户信息(orders-->user:一个订单只能由一个用户创建  一对一 

 

1.2 sql语句

查询语句:

先确定主查询表:订单信息表

再确定关联查询表:用户信息

通过orders关联查询用户使用user_id一个外键,只能关联查询出一条用户记录就可以使用内连接

SELECT
  orders.*,
  user.username,
  user.sex
FROM
  orders,
  USER
WHERE orders.user_id = user.id

1.3 使用resultType实现

1.3.1 创建po

基础的单表的 po类:

 

1.3.2 一对一查询映射的pojo

 

创建pojo包括 订单信息和用户信息,resultType才可以完成映射。

 

创建OrderCustom作为自定义pojo,继承sql查询列多的po类。

 

 

 

1.3.3 mapper.xml

定义mapper.xml文件,

 

1.3.4 mapper.java

 

 

1.4 使用resultMap实现一对一

1.4.1 resultMap映射思路

resultMap提供一对一关联查询的映射和一对多关联查询映射,一对一映射思路:将关联查询的信息映射到pojo中,如下:

 

Orders类中创建一个User属性,将关联查询的信息映射到User属性中。

 

 

1.4.2 mapper.xml

 


1.4.3 resultMap定义

 

 

1.4.4 mapper.java

 

1.5 小结

resultType:要自定义pojo 保证sql查询列和pojo的属性对应,这种方法相对较简单,所以应用广泛。

 

resultMap:使用association完成一对一映射需要配置一个resultMap,过程有点复杂,如果要实现延迟加载就只能用resultMap实现 ,如果为了方便对关联信息进行解析,也可以用association将关联信息映射到pojo中方便解析。

 

一对多查询

 

2.1 需求

 

查询所有订单信息及订单下的订单明细信息。

 

2.2 sql语句

 

主查询表:订单表

关联查询表:订单明细

SELECT
  orders.*,
  user.username,
  user.sex ,
  orderdetail.id orderdetail_id,
  orderdetail.items_num,
  orderdetail.items_id
FROM
  orders,
  USER,
  orderdetail
WHERE orders.user_id = user.id  AND orders.id = orderdetail.orders_id

2.3 resultMap进行一对多映射思路

 

resultMap 提供collection完成关联信息映射到集合对象中。

 

orders类中创建集合属性:

 


2.4 mapper.xml

 

 

2.5 resultMap定义

 

2.6 mapper.java

 

 

一对多查询(复杂)

3.1 需求

查询所有用户信息,关联查询订单及订单明细信息及商品信息,订单明细信息中关联查询商品信息

 

3.2 sql

主查询表:用户信息

关联查询:订单、订单明细,商品信息

 

SELECT
  orders.*,
  user.username,
  user.sex ,
  orderdetail.id orderdetail_id,
  orderdetail.items_num,
  orderdetail.items_id,
  items.name items_name,
  items.detail items_detail
FROM
  orders,
  USER,
  orderdetail,
  items
WHERE orders.user_id = user.id  AND orders.id = orderdetail.orders_id AND items.id = orderdetail.items_id


3.3 pojo定义

 

user.java中创建映射的属性:集合 List<Orders>  orderlist

Orders中创建映射的属性:集合List<Orderdetail> orderdetails 

在Orderdetail中创建商品属性:pojo   Items items

 

 



 

3.4 mapper.xml

 

3.5 resultMap

 


3.6 mapper.java

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值