大白话帮你理解Mybatis中的高级映射(一对一、一对多、多对多)

365平台拒绝提款怎么办 2025-10-01 04:14:46 admin 阅读 9621

文章目录

一、 概述二、什么是映射三、理解高级映射3.1 一对一(resultMap)3.2 一对多3.3多对多

四、总结

一、 概述

可能很多小伙伴在学习mybatis中高级映射,看到一对一、一对多、多对多脑子一片混论,这都是些什么乱七八糟 因此在学习这部分内容是都是一路懵圈。下面我将自己的领悟分享给大家,不喜勿喷哈,文章不合适的地方欢迎大家共同商讨

二、什么是映射

大家都知道Myabtis是一个不完全的ORM(对象-关系映射)框架,那什么是对象什么是映射呢? 简单来说,就是面向对象的思想。大家既然能学到mybatis想必就不用我多说面向对象是什么了。高级映射都是在多表操作中使用的,在mybatis中把对象之间使用statement进行了关联,数据库中使用外键将数据表之间进行关联,从而完成某个需求。

举个例子:网购的时候,我可以下单买东西,一个订单里我可以购买多个商品,我还可以下很多订单。

我就是一个对象,订单和商品是对象,订单详情也是一个对象,他们之间关系就是通过statement进行关联映射的。

三、理解高级映射

继续用上面的例子

3.1 一对一(resultMap)

我可以创建多个订单,但是每一个订单都由唯一一个用户创建的,因此就可以在用户表里选择一个主键字段作为订单表的外键,在订单表的持久类中定义一个用户类的属性

映射思路:

使用resultMap将查询结果中的订单信息映射到Orders对象中,在orders类中添加User属性,将关联查询出来的用户信息映射到orders对象中的user属性中。

订单持久类:

public class Orders {

private Integer id;

private Integer userId;

private String number;

private Date createtime;

private String note;

//用户信息

private User user;

在Mapper文件中使用association子标签进行关联

3.2 一对多

一个订单可能会下多个商品有很多的订单详情,这时就需要在订单表Orders中添加订单详情Ordersdatil属性,并且以集合方式定义,

public class Orders {

private Integer id;

private Integer userId;

private String number;

private Date createtime;

private String note;

//用户信息

private User user;

//订单明细

private List orderdetails;

在Mapper文件中使用****子标签进行关联

3.3多对多

一个用户可以购买多个商品,一个商品可以由多个用户购买,由于用户和商品没有直接关联,通过订单和订单明细进行关联,所以关联表:orders、orderdetail、items。

映射思路:

将用户信息映射到user中。在user类中添加订单列表属性List《Orders》 orderslist,将用户创建的订单映射到orderslist在Orders中添加订单明细列表属性List《OrderDetail》orderdetials,将订单的明细映射到orderdetials在OrderDetail中添加Items属性,将订单明细所对应的商品映射到Items

四、总结

resultType: 作用: 将查询结果按照sql列名pojo属性名一致性映射到pojo中。 场合: 常见一些明细记录的展示,比如用户购买商品明细,将关联查询信息全部展示在页面时,此时可直接使用resultType将每一条记录映射到pojo中,在前端页面遍历list(list中是pojo)即可。

resultMap: 使用association和collection完成一对一和一对多高级映射(对结果有特殊的映射要求)。

association: 作用: 将关联查询信息映射到一个pojo对象中。 场合: 为了方便查询关联信息可以使用association将关联订单信息映射为用户对象的pojo属性中,比如:查询订单及关联用户信息。 使用resultType无法将查询结果映射到pojo对象的pojo属性中,根据对结果集查询遍历的需要选择使用resultType还是resultMap。

collection: 作用: 将关联查询信息映射到一个list集合中。 场合: 为了方便查询遍历关联信息可以使用collection将关联信息映射到list集合中,比如:查询用户权限范围模块及模块下的菜单,可使用collection将模块映射到模块list中,将菜单列表映射到模块对象的菜单list属性中,这样的作的目的也是方便对查询结果集进行遍历查询。

相关文章

迷你音响总排行榜

新手学习html多久可以写静态网页

“金耳朵”是怎么炼成的?这些真相HIFI老烧都未必清楚

诛仙折扣平台怎么选?如何通过平台买折扣号与充值,这里有答案!