mybatis关联关系

关联关系

银行卡数据模型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dXx7cS9D-1618219891862)(C:\Users\zhangjuan\AppData\Roaming\Typora\typora-user-images\image-20210412170527500.png)]

1、1对1查询

查询银行卡信息,关联查询下单用户信息。

SQL****语句
SELECT
 bc.*,
  user.username,
  user.address
FROM
 bankCard bc LEFT JOIN user
  ON bc.user_id = user.id
方法一: resultType

定时属性值,此处不做分析

方法二:resultMap

使用resultMap进行结果映射,定义专门的resultMap用于映射一对一查询结果。

创建扩展po类

创建BindCardExt类(该类用于结果集封装),加入User属性,user属性中用于存储关联查询的用户信

息,因为银行卡关联查询用户是一对一关系,所以这里使用单个User对象存储关联查询的用户信息。

public class BindCardExt extends Orders {
    private User user;// 用户对象
 // get/set。。。。
}
Mapper映射文件

在UserMapper.xml中,添加以下代码:

<!-- 查询订单关联用户信息使用resultmap -->
 <resultMap type="BindCardExt" id="bankCardAndUserRstMap">
     <id column="id" property="id"/>
     <result column="user_id" property="userId"/>
     <result column="number" property="number"/>
     <result column="createtime" property="createtime"/>
     <!-- 一对一关联映射 -->
     <!-- 
     property:Orders对象的user属性
     javaType:user属性对应 的类型
     -->
     <association property="user" javaType="com.kkb.mybatis.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="findBankCardAndUserRstMap" resultMap="bankCardAndUserRstMap">
     SELECT
     o.id,
     o.user_id,
     o.number,
     o.createtime,
    u.username,
	u.address
     FROM
     orders o
     JOIN `user` u ON u.id = o.user_id
 </select>
注意:
  • association:表示进行一对一关联查询映射

  • property:表示关联查询的结果存储在com.kkb.mybatis.po.BankCard 的user属性中

  • javaType:表示关联查询的映射结果类型

  • 使用resultMap进行结果映射时,具体是使用association完成关联查询的映射,将关联查询信息映射到

pojo对象中。

2、1对多的查询

查询所有用户信息及用户关联的银行卡信息。

sql语句
SELECT
 u.*, 
 o.id oid,
 o.number,
 o.createtime
FROM
 `user` u
LEFT JOIN bankCard o ON u.id = o.user_id
分析

主信息:用户信息

从信息:银行卡信息

在一对多关联查询时,只能使用resultMap进行结果映射。

1、一对多关联查询时,sql查询结果有多条,而映射对象是一个。

2、resultType完成结果映射的方式的一条记录映射一个对象。

3、resultMap完成结果映射的方式是以[主信息]为主对象,[从信息]映射为集合或者对象,然后封装到

主对象中。

修改po

在User类中加入List bankCardList 属性

Mapper映射文件

在UserMapper.xml文件中,添加以下代码:

<resultMap type="user" id="userAndOrderRstMap">
     <!-- 用户信息映射 -->
     <id property="id" column="id"/>
     <result property="username" column="username"/>
     <result property="birthday" column="birthday"/>
     <result property="sex" column="sex"/>
     <result property="address" column="address"/>
     <!-- 一对多关联映射 -->
     <collection property="orders" ofType="bankcards">
     <id property="id" column="oid"/> 
     <result property="userId" column="id"/>
     <result property="number" column="number"/>
     <result property="createtime" column="createtime"/>
     <result property="note" column="note"/>
     </collection>
</resultMap>

<select id="findUserAndOrderRstMap" resultMap="userAndOrderRstMap">
     SELECT
 		u.*,
       o.id oid,
	   o.number,
      o.createtime 
     FROM
     `user` u
     LEFT JOIN bankCard o ON u.id = o.user_id
 </select>
     
注意:

Collection标签:定义了一对多关联的结果映射。

property=“bankcards”**:关联查询的结果集存储在User对象的上哪个属性。

ofType=“bankcards”**:指定关联查询的结果集中的对象类型即List中的对象类型。此处可以使用别名,也

可以使用全限定名。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值