Mybatis的关联关系配置一对一,一对多,多对多的映射关系

简介: Mybatis的关联关系配置一对一,一对多,多对多的映射关系

关联关系映射

关联关系映射在Mybatis中主要通过三种方式实现:一对一关联和一对多关联及多对多关联

一对一关联:

在一对一关联中,两个表之间存在一对一的关系,例如学生表和身份证表,一个学生只有一个身份证,而一个身份证也只属于一个学生。在Mybatis中,可以通过在实体类中定义关联属性,然后在映射文件中使用<association>标签来定义关联关系。通过配置映射关系,可以查询到学生表和身份证表的数据,并将其映射到对应的实体类中。

一对多关联:

在一对多关联中,两个表之间存在一对多的关系,例如部门表和员工表,一个部门可以有多个员工,而一个员工只属于一个部门。在Mybatis中,可以通过在实体类中定义关联属性,然后在映射文件中使用<collection>标签来定义关联关系。通过配置映射关系,可以查询到部门表和员工表的数据,并将其映射到对应的实体类中。

多对多关联:

是指两个表之间存在多对多的关联关系,即一个表的一条记录可以对应另一个表的多条记录,反之亦然。在数据库中,多对多关系通常需要通过中间表来实现。

在Mybatis中,可以通过定义中间表来映射多对多关系。假设有两个表,学生表和课程表,一个学生可以选择多门课程,而一门课程也可以被多个学生选择。为了映射这种多对多关系,需要创建一个中间表,例如选课表,用来记录学生和课程的关联关系。

 

导入数据库表

在generatorConfig.xml文件中,配置多张表

一对多

  使用嵌套查询(Nested Queries):在主对象的映射配置中使用<collection>标签来配置关联的多个子对象。可以通过select语句查询子对象,并通过resultMap将结果映射到主对象中。

创建一个 OrderVo

package com.xiaoxu.Vo;
import com.xiaoxu.model.Order;
import com.xiaoxu.model.OrderItem;
import java.util.ArrayList;
import java.util.List;
/**
 * @author小徐
 * @site www.veryedu.cn
 * @company xu集团
 * @create 2023-08-26 14:21
 */
public class OrderVo extends Order {
    private List<OrderItem> orderItems = new ArrayList<OrderItem>();
    public List<OrderItem> getOrderItems() {
        return orderItems;
    }
    public void setOrderItems(List<OrderItem> orderItems) {
        this.orderItems = orderItems;
    }
}

建立一个resultMap映射

接着写biz层

package com.xiaoxu.impl;
import com.xiaoxu.Vo.OrderVo;
import com.xiaoxu.biz.OrderBiz;
import com.xiaoxu.mapper.OrderMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
 * @author小徐
 * @site www.veryedu.cn
 * @company xu集团
 * @create 2023-08-26 14:34
 */
@Service
public class OrderBizImpl implements OrderBiz {
    @Autowired
    private OrderMapper orderMapper;
    @Override
    public OrderVo selectByOid(Integer oid) {
        return orderMapper.selectByOid(oid);
    }
}

一对一

使用嵌套查询(Nested Queries):在主对象的映射配置中使用<association>标签来配置关联的子对象。可以通过select语句查询子对象,并通过resultMap将结果映射到主对象中。

和之前一样,首先配置一个查询方法

biz层

package com.xiaoxu.impl;
import com.xiaoxu.Vo.OrderVo;
import com.xiaoxu.biz.OrderBiz;
import com.xiaoxu.mapper.OrderMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
 * @author小徐
 * @site www.veryedu.cn
 * @company xu集团
 * @create 2023-08-26 14:34
 */
@Service
public class OrderBizImpl implements OrderBiz {
    @Autowired
    private OrderMapper orderMapper;
    @Override
    public OrderVo selectByOid(Integer oid) {
        return orderMapper.selectByOid(oid);
    }
}

多对多

使用嵌套查询(Nested Queries):在中间表的映射配置中使用<collection>标签来配置关联的多个子对象。可以通过select语句查询子对象,并通过resultMap将结果映射到中间表对象中。

还是一样先配置一个查询方法

biz层

package com.xiaoxu.impl;
import com.xiaoxu.Vo.HbookVo;
import com.xiaoxu.biz.HBookBiz;
import com.xiaoxu.mapper.HBookMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
 * @author小徐
 * @site www.veryedu.cn
 * @company xu集团
 * @create 2023-08-26 16:39
 */
@Service
public class HBookBizImpl implements HBookBiz {
    @Autowired
    private HBookMapper hBookMapper;
    @Override
    public HbookVo selectByBookId(Integer bid) {
        return hBookMapper.selectByBookId(bid);
    }
}


目录
相关文章
|
2月前
|
SQL XML Java
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
文章介绍了MyBatis中高级查询的一对多和多对一映射处理,包括创建数据库表、抽象对应的实体类、使用resultMap中的association和collection标签进行映射处理,以及如何实现级联查询和分步查询。此外,还补充了延迟加载的设置和用法。
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
|
2月前
|
SQL XML Java
mybatis复习01,简单配置让mybatis跑起来
文章介绍了MyBatis的基本概念、历史和特点,并详细指导了如何配置MyBatis环境,包括创建Maven项目、添加依赖、编写核心配置文件、创建数据表和实体类、编写Mapper接口和XML配置文件,以及如何编写工具类和测试用例。
mybatis复习01,简单配置让mybatis跑起来
|
1月前
|
SQL XML Java
Mybatis中一对一和一对多的处理
这篇文章讲解了在Mybatis中如何处理一对一和一对多的关系映射,包括使用association和collection标签的具体方法。
20 1
|
3月前
|
安全 Java 数据库连接
后端框架的学习----mybatis框架(3、配置解析)
这篇文章详细介绍了MyBatis框架的核心配置文件解析,包括环境配置、属性配置、类型别名设置、映射器注册以及SqlSessionFactory和SqlSession的生命周期和作用域管理。
后端框架的学习----mybatis框架(3、配置解析)
|
2月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
44 1
|
3月前
|
Java 数据库连接 mybatis
后端框架的学习----mybatis框架(9、多对一处理和一对多处理)
这篇文章介绍了在MyBatis框架中如何处理多对一和一对多的关联查询,通过定义`<resultMap>`和使用`<association>`与`<collection>`元素来实现对象间的关联映射。
|
3月前
|
缓存 Java 数据库连接
mybatis1.常见配置
本文介绍了MyBatis框架中的常见配置及其加载顺序。配置可通过`properties`元素、资源文件或方法参数传递,其中方法参数传递的属性具有最高优先级。文章列举了几个重要的配置项,如`cacheEnabled`用于全局开启或关闭缓存功能;`lazyLoadingEnabled`控制对象的延迟加载行为;`useGeneratedKeys`允许JDBC支持自动生成主键;`defaultExecutorType`设定默认执行器类型等。此外,还介绍了多环境配置方法,通过`environments`元素可定义不同环境下的数据库连接信息,并可根据需求动态选择加载特定环境
|
4月前
|
SQL Java 数据库连接
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
90 3
|
1月前
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
105 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
|
1月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
52 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块