mybatis的一对多,多对一,以及多对对的配置和使用

1.本文章是无意中看见易百教程的Mybatis教程才注意到这个问题,平时都仅仅是在用CRUD,忽略了这方面的问题,真实十分羞愧

2.首先我们开始对mybatis的一对多的探究

根据这个应用场景,我们需要获取在查询一个用户信息的时候还要去读取这个用户发布的帖子

现在我们来看一看用户级联文章在JavaBean中的编写方式,这就是一对多在JavaBean中的配置

现在我们再来看一看Mybatis的Mapper该如何编写一对多?很简单,就是在resultMap标签中配置<collection>标签,用来存储查询到的文章列表,注意posts代表的是用户实体的文章List集合

这样Sql查询到的内容就映射到User用户实体中的属性中啦,这就是一对多的查询

3.现在我们再来探究一下Mybatis的多对一,现在有一个需求如下

现在我们来看一看文章级联用户在JavaBean中的编写方式,这是多对一在JavaBean中的配置

现在我们再来看一看Mybatis的Mapper该如何编写多对一?很简单,就是在resultMap标签中配置<association></association>标签关联所属的用户实体

4.最后我们来探究一下Mybatis的多对多,在很多时候我们较好的运用多对多可以处理很多现实的逻辑问题,比如现在我们有下面这样一个需求

当前,一个用户可以拥有多个组,一个组也可以拥有多个用户,这样的关系就是多对多,为了解决这个问题,我们需要再用户和组之间建立一张关联的表,用于存储他们之间的对应关系,用户和组都通过这个关联的表,来查询他们之间的关系

现在我我们先来看一看这个关联对象的JavaBean和其Mybatis的Mapper文件是怎么样的

首先是JavaBean

再来看看这个实体对应的Mapper文件,只有两个功能

现在我们开始来看我们的主角Users用户和Group组这两位的JavaBean和Mapper文件时怎么写的

先看Users(用户实体)

Users的Mapper

这样查询到的的User对用户象就是这样的,把这个用户所对应的组都查了出来

Users{id=0, username=‘yiibai‘, mobile=‘13838009988‘, groups=[Group{groupId=1, groupName=‘Group-1‘, users=null}, Group{groupId=2, groupName=‘Group-2‘, users=null}]}

再来看看Group(组实体),其实就是和Users实体是一样的哈

还是看Group的JavaBean

再看看看Group的Mapper

这样再查询Group的时候就会把这个组的所有成员都查询出来了

Group{groupId=0, groupName=‘Group-1‘, users=[Users{id=1, username=‘yiibai‘, mobile=‘13838009988‘, groups=null}, Users{id=2, username=‘User-name-1‘, mobile=‘13838009988‘, groups=null}]}

5.各位看官注意哈,本文中并没有给出所有源码,而是仅仅看重点,当前本文中的所有示例都是在下根据易百教程的Mybatis教程https://www.yiibai.com/mybatis/中的案例所测试,在下就仅仅介绍点重点和个人见解了

原文地址:https://www.cnblogs.com/jimisun/p/9414148.html

时间: 2024-07-30 13:42:33

mybatis的一对多,多对一,以及多对对的配置和使用的相关文章

mybatis 一对一 一对多 多对多

一对一 一对多 多对多 原文地址:https://www.cnblogs.com/cwone/p/11909271.html

Mybatis入门---一对多、多对多

前几天自己配置了Mybatis的高级查询:一对多和多对多,现在记录一下,方便以后用到的时候再回顾,下面是具体的操作步骤 一.首先就是配置Mybatis的xml文件及mapper的xml文件,在这里就不多说了,之前写过这个基本的配置,可以参考:https://www.cnblogs.com/blogs-of-xiu/p/10405407.html 经过配置完基本的xml文件之后,我们就开始实现一对多和多对多的需求. 我这里举的例子是用户和订单,一个用户可以对应多个订单,所以需要的表也是用户表和订单

mybatis学习笔记(11)-多对多查询

mybatis学习笔记(11)-多对多查询 mybatis学习笔记11-多对多查询 示例 多对多查询总结 resultMap总结 本文实现多对多查询,查询用户及用户购买商品信息. 示例 查询主表是:用户表 关联表:由于用户和商品没有直接关联,通过订单和订单明细进行关联,所以关联表:orders.orderdetail.items sql SELECT orders.*, user.username, user.sex, user.address, orderdetail.id orderdeta

hibernate 一对多|多对一

一对多:(一个客户对应多个联系人) 客户实体:Customer.java package cn.future.domain; import java.util.HashSet; import java.util.Set; public class Customer { /* * CREATE TABLE `cst_customer` ( `cust_id` BIGINT(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)', `cust_name` VAR

框架 day32 Hibernate,一级缓存,关联关系映射(一对多,多对多)

一级缓存 概念 *在 Session 接口的实现中包含一系列的 Java 集合, 这些 Java集合构成了Session缓存. 只要 Session 实例没有结束生命周期, 存放在它缓存中的对象也不会结束生命周期 *当session的save()方法持久化一个对象时,该对象被载入缓存, 以后即使程序中不再引用该对象,只要缓存不清空,该对象仍然处于生命周期中. 当试图get(). load()对象时,会判断缓存中是否存在该对象,有则返回,此时不查询数据库.没有再查询数据库 *Session 能够在

DjangoORM一对多&多对多操作

简要说明 通过操作对象的方式操作数据库 详细步骤 models.py的结构是: 如果models.py中外键定义没有写 related_name='student_teacher', 可以直接用 studentList = teacher.student_teacher.all() 可以改写成: teacher = Teacher.objects.get(id = 1) studentList = teacher.student_set.all() =======================

PD 15.1 安装 破解 , 简单使用 (一对多,多对多关系生成sql脚本)

  1:运行  PowerDesigner15_Evaluation.exe 默认   2: 安装完毕后,不要执行,下面我们进行 破解 把 PowerDesigner15汉化+注册补丁  下的所有文件,覆盖 PD的安装目录下的文件 然后我们打开 PD,点击 帮助 –> About  看到下面窗口中红色方框,就表示已经破解 + 汉化成功 PD 15.1 安装 破解 , 简单使用 (一对多,多对多关系生成sql脚本)

Hibernate 集合映射 一对多多对一 inverse属性 + cascade级联属性 多对多 一对一 关系映射

1 . 集合映射 需求:购物商城,用户有多个地址. // javabean设计 // javabean设计 public class User { private int userId; private String userName; // 一个用户,对应的多个地址 private Set<String> address; private List<String> addressList = new ArrayList<String>(); //private Str

mybatis的一对多

1.配置文件 db.properties db.driver=com.mysql.jdbc.Driver db.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8 db.username=root db.password=123456 SqlMapConfig.xml 1 <?xml version="1.0" encoding="UTF-8" ?