Mybatis的关联关系映射以及自定义resultMap三种映射关系

目录

经典面试题:

一,关联关系映射

二,具体步骤:

总结


前言:

今天我们来学习Mybatis的关联关系映射以及自定义resultMap三种映射关系,希望这篇博客可以帮助大家的学习工作!!!

Mybatis的关联关系映射以及自定义resultMap三种映射关系_第1张图片

 

经典面试题:

问 :在Mybatis中的表之间的关系是如何映射处理的?

答:

在MyBatis中,表与表之间的关系主要通过两种方式进行映射:一对一(One-to-One)和一对多(One-to-Many)关系。

对于一对一关系,可以使用两个表之间的外键进行映射。在MyBatis的映射文件中,可以使用标签定义一个结果映射对象,并使用标签进行关联映射。

对于一对多关系,可以使用一个表的外键与另一个表的主键进行映射。在MyBatis的映射文件中,可以使用标签定义一个结果映射对象,并使用标签进行集合映射。

需要注意的是,在映射文件中,可以使用标签来定义表字段与Java对象属性之间的映射关系。

准备:将具有一对一,一对多的表导入mysqll数据库中去。

一,关联关系映射

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

一,一对一

例如:一个用户(User)与一个地址(Address)之间的关系。

二,一对多

例如: 订单表的id对应多个订单详情表

三,多对多

例如:一本书对应多种类型,一种类型对应多本书

二,具体步骤:

一,一对一

2.1创建名为 t_hibernate_book (书籍表) 数据表

Mybatis的关联关系映射以及自定义resultMap三种映射关系_第2张图片

创建名为 t_hibernate_book_category (书籍类别表) 数据表 

其中名为 bid 的属性字段为 t_hibernate_book (书籍表) 的 bid(主键) 的外键

其中名为 cid 的属性字段为 t_hibernate_category (类别表) 的 category_id (主键) 的外键

Mybatis的关联关系映射以及自定义resultMap三种映射关系_第3张图片

创建名为 t_hibernate_category (类别表) 数据表 

Mybatis的关联关系映射以及自定义resultMap三种映射关系_第4张图片

 

t_hibernate_order (订单表) 数据表

Mybatis的关联关系映射以及自定义resultMap三种映射关系_第5张图片

 t_hibernate_order_item (订单详情表) 数据表

Mybatis的关联关系映射以及自定义resultMap三种映射关系_第6张图片

修改 generatorConfig.xml 的配置文件 

 

Mybatis的关联关系映射以及自定义resultMap三种映射关系_第7张图片

代码:




    
    
 
    
    
 
    
    
        
        
            
             
        
 
        
        
 
        
        
            
            
        
 
        
        
        
        
            
            
            
            
            
            
            
            
        
 
        
        
            
            
        
 
        
        
        
        
        
            
            
        
 
        
        
        
        
        
        
        
        
        
        
        
        
        
 
        

自动生成实体

创建一个 名为 OrderItemVo 的类,继承OrderItem类,及属性有Order对象

Mybatis的关联关系映射以及自定义resultMap三种映射关系_第8张图片


  
  
  
    
    
      
      
      
      
    
  

  

在自动生成的 OrderItemMapper 接口中进行增加以下代码

 OrderItemVo selectByBiid(@Param("oiid") Integer oiid);

 

Mybatis的关联关系映射以及自定义resultMap三种映射关系_第9张图片

创建一个接口名为 : OrderItemBiz 接口

package com.lya.biz;

import com.lya.vo.OrderItemVo;

/**
 * @author 程序猿-小李哥
 * @site www.xiaolige.com
 * @company 猪八戒有限集团
 * @create 2023-09-04-9:38
 */
public interface OrderItemBiz {

    OrderItemVo selectByBiid(Integer oiid);

}

创建一个实现了名为 OrderItemBizImpl 

package com.lya.biz.impl;

import com.lya.biz.OrderItemBiz;
import com.lya.mapper.OrderItemMapper;
import com.lya.model.OrderItem;
import com.lya.vo.OrderItemVo;
import org.springframework.beans.factory.annotation.Autowired;

/**
 * @author 程序猿-小李哥
 * @site www.xiaolige.com
 * @company 猪八戒有限集团
 * @create 2023-09-04-9:40
 */
public class OrderItemBizImpl implements OrderItemBiz {
    @Autowired
    private OrderItemMapper orderItemMapper;

    @Override
    public OrderItemVo selectByBiid(Integer oiid) {
        return orderItemMapper.selectByBiid(oiid);
    }
}

测试:

Mybatis的关联关系映射以及自定义resultMap三种映射关系_第10张图片

 

二,一对多

创建一个 名为 OrdeVo 的类,继承Order

package com.lya.vo;

import com.lya.model.Order;
import com.lya.model.OrderItem;

import java.util.ArrayList;
import java.util.List;

/**
 * @author 程序猿-小李哥
 * @site www.xiaolige.com
 * @company 猪八戒有限集团
 * @create 2023-08-26-16:57
 */
public class OrderVo extends Order {
    private List  orderItems = new ArrayList<>();

    public List getOrderItems() {
        return orderItems;
    }

    public void setOrderItems(List orderItems) {
        this.orderItems = orderItems;
    }
}

在自动生成的 OrderMapper.xml 配置文件中增加以下配置

  
      
      
    
      
      
      
      
    
  
  

在自动生成的 OrderMapper接口中进行增加以下代码

OrderVo selectByOid(@Param("oid") Integer oid);

创建一个接口名为 : OrderBiz 接口

package com.lya.biz;

import com.lya.vo.OrderVo;

/**
 * @author 程序猿-小李哥
 * @site www.xiaolige.com
 * @company 猪八戒有限集团
 * @create 2023-09-04-10:04
 */
public interface OrderBiz {
    OrderVo selectByOid(Integer oid);
}

创建一个实现类,名为 OrderBizImpl 

package com.lya.biz.impl;

import com.lya.biz.OrderBiz;
import com.lya.mapper.OrderMapper;
import com.lya.vo.OrderVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author 程序猿-小李哥
 * @site www.xiaolige.com
 * @company 猪八戒有限集团
 * @create 2023-09-04-10:05
 */
@Service
public class OrderBizImpl implements OrderBiz {

    @Autowired
    private OrderMapper orderMapper;

    @Override
    public OrderVo selectByOid(Integer oid) {
        return orderMapper.selectByOid(oid);
    }
}

测试:

    @Autowired
    private OrderBiz orderBiz;
 
    @Test
    public void selectByOid() {
        OrderVo orderVo = orderBiz.selectByOid(7);
        System.out.println(orderVo);
        orderVo.getOrderItems().forEach(System.out::println);
    }

Mybatis的关联关系映射以及自定义resultMap三种映射关系_第11张图片

三,多对多

在自动生成的 HBookMapper.xml 配置文件中增加以下配置

  
    
    
    
    
      
      
    
  
 
  

在自动生成的 HBookMapper 接口 中增加以下方法

  HBookVo selectByBookId(@Param("bid") Integer bid);

创建一个接口名为 HBookBiz 

package com.lya.biz;

import com.lya.vo.HBookVo;
import org.apache.ibatis.annotations.Param;

/**
 * @author 程序猿-小李哥
 * @site www.xiaolige.com
 * @company 猪八戒有限集团
 * @create 2023-09-04-10:13
 */
public interface HBookBiz {

    HBookVo selectByBookId(@Param("bid") Integer bid);

}


创建一个实现类,名为 HBookBizImpl 

package com.lya.biz.impl;

import com.lya.biz.HBookBiz;
import com.lya.mapper.HBookMapper;
import com.lya.vo.HBookVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author 程序猿-小李哥
 * @site www.xiaolige.com
 * @company 猪八戒有限集团
 * @create 2023-09-04-10:13
 */
@Service
public class HBookBizImpl implements HBookBiz {
    @Autowired
    private HBookMapper hBookMapper;

    @Override
    public HBookVo selectByBookId(Integer bid) {
        return hBookMapper.selectByBookId(bid);
    }
}

测试

    @Autowired
    private HBookBiz hbookBiz;
    @Test
    public void selectByBookId() {
        HBookVo hBookVo = hbookBiz.selectByBookId(8);
        System.out.println(hBookVo);
        hBookVo.getCategories().forEach(System.out::println);
    }

总结

学习Mybatis的关联关系映射可以带来以下收获和认识:

1. 数据库关系的抽象:学习MyBatis的关联关系映射可以有助于我们理解数据库中表与表之间的关系,如一对一和一对多关系。这可以提升我们对数据模型的理解和设计能力。

2. 对象关系映射(ORM)的学习:MyBatis采用了ORM的思想,通过映射配置将数据库表与Java对象进行关联。学习MyBatis的关联关系映射可以帮助我们掌握ORM的基本原理和实践技巧。

3. 数据库操作的灵活性:MyBatis的关联关系映射使得数据库操作更加灵活,能够方便地进行多表查询或关联查询。这有助于我们优化数据库访问性能,并提供更好的数据查询和操作能力。

4. 代码重用和维护性:通过MyBatis的关联关系映射,我们可以将一对一或一对多关系的查询逻辑封装成可复用的SQL语句或映射文件片段,提高代码的重用性和可维护性。

5. 高效的数据库访问:MyBatis的关联关系映射能够有效地利用数据库的连接和查询优化,减少不必要的数据库访问,提高数据库操作的效率。

这些收获和认识将帮助我们更好地应对实际项目中的数据库操作需求,并提升我们作为Java程序员的能力和竞争力。

Mybatis的关联关系映射以及自定义resultMap三种映射关系_第12张图片

 

你可能感兴趣的:(Java,初学,java,开发语言)