MyBatis 的关联关系配置 一对多,一对一,多对多 关系的映射处理

简介: MyBatis 的关联关系配置 一对多,一对一,多对多 关系的映射处理

一.关联关系配置的好处

        MyBatis是一个Java持久化框架,可以通过XML或注解的方式将对象与数据库的关系进行映射。在MyBatis中,可以使用不同的方式配置关联关系,包括一对多、一对一和多对多关系。接上篇的MyBatis的教学

  1. 数据库表之间的关联关系:在关系型数据库中,不同表之间存在一对多、一对一、多对多等关联关系。通过在MyBatis中配置关联关系,可以方便地处理这些表之间的连接和查询操作,使数据的读取和写入更加简单和高效。
  2. 避免手动编写复杂SQL:使用MyBatis的关联关系配置,可以避免手动编写复杂的SQL语句来处理多个表之间的关联。通过简单的配置,MyBatis可以自动处理表之间的连接查询,简化了开发者的工作量。
  3. 对象关系映射:MyBatis是一个对象关系映射(ORM)框架,它可以将数据库中的表与Java对象之间进行映射。配置关联关系可以帮助开发者实现对象之间的关联,提供了更加面向对象的编程方式。
  4. 冗余数据减少:通过合理的关联关系配置,可以避免数据的冗余存储,减少数据库的存储空间占用。同时,在查询数据时,也可以通过关联关系一次性获取到所有相关的数据,提高查询效率。

总的来说,MyBatis的关联关系配置可以帮助开发者处理多表之间的关系,提供了更方便、高效和可维护的数据操作方式,减少了手动编写复杂SQL语句的工作量,同时也符合对象关系映射的思想。

二. 导入数据库表:

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


三.    一对多关系:--    一个订单对应多个订单项        

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

       我们先在orderMapper.xml中写一个根据ID查询订单的方法

         创建一个orderVo

package com.zking.vo;
import com.zking.model.Order;
import com.zking.model.OrderItem;
import java.util.ArrayList;
import java.util.List;
/**
 * @author yinzi
 * @create 2023-08-26 14:14
 */
public class OrderVo extends Order {
    private List<OrderItem> orderItems=new ArrayList<>();
    public List<OrderItem> getOrderItems() {
        return orderItems;
    }
    public void setOrderItems(List<OrderItem> orderItems) {
        this.orderItems = orderItems;
    }
}

   建一个resultMap的映射

        接着,写biz层

package com.zking.biz;
import com.zking.mapper.OrderMapper;
import com.zking.vo.OrderVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
 * @author yinzi
 * @create 2023-08-26 14:31
 */
@Service //交给spring管理
public class OrderBizImpl implements OrderBiz {
    @Autowired
    private OrderMapper om;
    @Override
    public OrderVo selectbyOid(Integer oid) {
        return om.selectbyOid(oid);
    }
}

     最后测试结果

 


四.一对一关系:---一个订单项对应一个订单

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

      一样,我先来配置一个查询的方法

        然后写biz层

package com.zking.biz;
import com.zking.mapper.OrderItemMapper;
import com.zking.model.OrderItem;
import com.zking.vo.OrderItemVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
 * @author yinzi
 * @create 2023-08-26 15:23
 */
@Service
public class OrderItemBizImpl implements OrderItemBiz {
    @Autowired
    private OrderItemMapper oim;
    @Override
    public OrderItemVo selectByOrderItemId(Integer oiid) {
        return oim.selectByOrderItemId(oiid);
    }
}

       最后测试:

 

五.多对多关系(两个一对多)

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

       老套路,先配置一个查询的方法

        然后接着写biz层

package com.zking.biz;
import com.zking.mapper.HBookMapper;
import com.zking.vo.HBookVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
 * @author yinzi
 * @create 2023-08-26 16:08
 */
@Service
public class HBookBizImpl implements HBookBiz {
    @Autowired
    private HBookMapper hm;
    @Override
    public HBookVo selectByBookId(Integer bid) {
        return hm.selectByBookId(bid);
    }
}

最后测试结果:

今天的分享就到这啦!!

相关文章
|
10天前
|
SQL 人工智能 Java
mybatis-plus配置sql拦截器实现完整sql打印
_shigen_ 博主分享了如何在MyBatis-Plus中打印完整SQL,包括更新和查询操作。默认日志打印的SQL用?代替参数,但通过自定义`SqlInterceptor`可以显示详细信息。代码示例展示了拦截器如何替换?以显示实际参数,并计算执行时间。配置中添加拦截器以启用此功能。文章提到了分页查询时的限制,以及对AI在编程辅助方面的思考。
45 5
mybatis-plus配置sql拦截器实现完整sql打印
|
2天前
|
SQL XML Java
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
16 3
|
1天前
|
XML 前端开发 Java
Mybatis-Plus乐观锁配置
Mybatis-Plus乐观锁配置
9 1
|
6天前
|
Java Spring
mybatisplus的typeAliasesPackage 配置
【6月更文挑战第20天】mybatisplus的typeAliasesPackage 配置
12 3
|
2天前
|
Java 数据库连接 mybatis
Mybatis基于注解的一对一和一对多查询
Mybatis基于注解的一对一和一对多查询
8 0
|
2天前
|
SQL Java 数据库连接
Mybatis中一对多mapper配置
Mybatis中一对多mapper配置
8 0
|
7天前
|
Java 数据库连接 Apache
JavaWeb基础第二章(Maven项目与MyBatis 的快速入门与配置)
JavaWeb基础第二章(Maven项目与MyBatis 的快速入门与配置)
|
30天前
|
XML Java 数据库连接
【MyBatisPlus】快速入门、常用注解、常用配置
【MyBatisPlus】快速入门、常用注解、常用配置
22 0
|
Java 数据库连接 mybatis
MyBatis-Spring配置简单了解
在基本的 MyBatis 中,session 工厂可以使用 SqlSessionFactoryBuilder 来创建。而在 MyBatis-spring 中,则使用 SqlSessionFactoryBean 来替代。
864 0
|
1月前
|
算法 Java 数据库连接
Spring+MySQL+数据结构+集合,Alibaba珍藏版mybatis手写文档
Spring+MySQL+数据结构+集合,Alibaba珍藏版mybatis手写文档