Mybatis的关联关系映射

目录

一.什么是关联关系映射

二.一对一映射

2.1.数据库创建

2.2.配置文件

 2.3.代码生成

  2.4.编写测试

 三.一对多关联映射

 四.多对多关联映射

         好啦,今天的分享就到这了,希望能够帮到你呢!  


一.什么是关联关系映射

关联关系映射通常指的是将一个实体与另一个或多个实体之间的关联关系进行映射和建模的过程。在数据库设计和数据建模中,关联关系映射是很重要的一部分。它可以通过关系型数据模型中的外键或者其他方式来表示不同实体之间的关系。

例如,在一个图书馆的数据库中,可以建立一个关联关系映射将图书和读者之间的借阅关系进行记录,即每本书都通过一个特定的标识符与借阅者相关联。这个关联关系映射可以用关系型数据库的表来表示,其中包括图书表和读者表,通过一个外键或者中间表来记录借阅关系。

关联关系映射也可以用于其他领域,如软件开发中的对象关系映射(ORM),用于将对象与数据库表之间的关联关系进行映射;或者在数据分析和机器学习中,用于构建特征与目标变量之间的关联关系

二.一对一映射

对一映射是指在两个集合之间,每个元素都只对应另一个集合中的一个元素。换句话说,每个元素在映射中都有唯一的对应关系。

在数据库设计和数据建模中,一对一映射通常用于将两个实体之间的关系表示为一对一的关系。例如,在一个学校的数据库中,可以建立一个一对一的映射将学生和学生身份信息进行关联。每个学生在映射中都有唯一的学生身份信息记录。

一对一映射也可以在编程中应用。例如,在某些编程语言中,可以使用数据结构如字典(dict)或映射(map)来实现一对一的映射关系。

 实例演示:

2.1.数据库创建

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

Mybatis的关联关系映射_第1张图片

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

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

其中名为 cid 的属性字段为 t_hibernate_category (类别表) 的 category_id (主键) 的外键:
Mybatis的关联关系映射_第2张图片

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

Mybatis的关联关系映射_第3张图片

 创建名为 t_hibernate_order (订单表) 数据表:

Mybatis的关联关系映射_第4张图片

 创建名为 t_hibernate_order_item (订单详情表) 数据表

其中名为 order_id 的属性字段为 t_hibernate_order (订单表) 的 oid (主键) 的外键:

Mybatis的关联关系映射_第5张图片

2.2.配置文件

修改名为 generatorConfig.xml 的 配置文件,修改后的所有代码如下 : 




    
    
 
    
    
 
    
    
        
        
            
             
        
 
        
        
 
        
        
            
            
        
 
        
        
        
        
            
            
            
            
            
            
            
            
        
 
        
        
            
            
        
 
        
        
        
        
        
            
            
        
 
        
        
        
        
        
        
        
        
        
        
        
        
        
 
        

 2.3.代码生成

配置好 generatorConfig.xml 的配置文件后进行,自动生成代码,操作如图 : 

Mybatis的关联关系映射_第6张图片

代码生成后就会出现以下的实体类对象,配置文件,接口类,如图 : 

Mybatis的关联关系映射_第7张图片

                  然后将每个实体类对象里面重写一下toString()方法

  2.4.编写测试

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

package com.junlinyi.vo;
 
import com.junlinyi.model.Order;
import com.junlinyi.model.OrderItem;
/**
 * @author 君临沂
 * @site www.junlinyi.jly
 * @company 君氏集团
 * @create  2023-08-26 15:30
 */
public class OrderItemVo extends OrderItem {
 
    private Order order;
 
    public Order getOrder() {
        return order;
    }
    public void setOrder(Order order) {
        this.order = order;
    }
 
}

在自动生成的OrderItemMapper.xml配置文件中进行增加以下配置:


  
  
  
  
  
    
    
  

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

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

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

package com.junlinyi.biz;
 
import com.junlinyi.model.OrderItem;
import com.junlinyi.vo.OrderItemVo;
import org.apache.ibatis.annotations.Param;
 
public interface OrderItemBiz {
 
    OrderItemVo selectByBiid(Integer oiid);
 
}

实现以上创建的接口,创建一个实现了名为 OrderItemBizImpl 

package com.junlinyi.biz.impl;
 
import com.junlinyi.biz.OrderItemBiz;
import com.junlinyi.mapper.OrderItemMapper;
import com.junlinyi.vo.OrderItemVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
/**
 * @author 君临沂
 * @site www.junlinyi.jly
 * @company 君氏集团
 * @create  2023-08-26 16:50
 */
@Service
public class OrderItemBizImpl implements OrderItemBiz {
 
    @Autowired
    private OrderItemMapper orderItemMapper;
 
    @Override
    public OrderItemVo selectByBiid(Integer oiid) {
        return orderItemMapper.selectByBiid(oiid);
    }
}

创建一个测试类 名为 Test01 ,用来进行方法测试

package com.junlinyi.biz.impl;
 
 
import com.junlinyi.biz.OrderBiz;
import com.junlinyi.biz.OrderItemBiz;
import com.junlinyi.vo.OrderItemVo;
import com.junlinyi.vo.OrderVo;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
/**
 * @author 君临沂
 * @site www.junlinyi.jly
 * @company 君氏集团
 * @create  2023-08-26 15:25
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:spring-context.xml"})
public class Test01 {
 
    
    @Autowired
    private OrderItemBiz orderItemBiz;
 
    @Before
    public void setUp() throws Exception {
    }
    @After
    public void tearDown() throws Exception {
    }
 
    @Test
    public void selectByBiid() {
        OrderItemVo orderItemVo = orderItemBiz.selectByBiid(27);
        System.out.println(orderItemVo);
        System.out.println(orderItemVo.getOrder());
    }
 
}

 三.一对多关联映射

创建一个 名为 OrdeVo 的类,继承Order类,及属性有List集合

用来存储查询到的OrderItem对象,因为是一对多所有查询出有多个对象

package com.junlinyi.vo;
 
import com.junlinyi.model.Order;
import com.junlinyi.model.OrderItem;
import com.junlinyi.utils.PageBean;
 
import java.util.ArrayList;
import java.util.List;
 
/**
 * @author 君临沂
 * @site www.junlinyi.jly
 * @company 君氏集团
 * @create  2023-08-26 15:05
 */
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.junlinyi.biz;
 
import com.junlinyi.vo.OrderVo;
 
public interface OrderBiz {
 
    OrderVo selectByOid(Integer oid);
    
}

在实现以上 OrderBiz 接口,创建一个实现类,名为 OrderBizImpl 

package com.junlinyi.biz.impl;
 
import com.junlinyi.biz.OrderBiz;
import com.junlinyi.mapper.OrderMapper;
import com.junlinyi.vo.OrderVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
/**
 * @author 君临沂
 * @site www.junlinyi.jly
 * @company 君氏集团
 * @create  2023-08-26 15:29
 */
@Service
public class OrderBizImpl implements OrderBiz {
 
    @Autowired
    private OrderMapper orderMapper;
 
    @Override
    public OrderVo selectByOid(Integer oid) {
        return orderMapper.selectByOid(oid);
    }
}

在测试类( Test01 )中增加以下测试方法及接口:

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

结果为如图  :

Mybatis的关联关系映射_第8张图片

 四.多对多关联映射

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

  
    
    
    
    
      
      
    
  
 
  

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

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

创建一个接口名为 HBookBiz 

package com.junlinyi.biz;
 
import com.junlinyi.vo.HBookVo;
import org.apache.ibatis.annotations.Param;
 
public interface HBookBiz {
 
    HBookVo selectByBookId(@Param("bid") Integer bid);
 
}

在实现以上 HBookBiz 接口,创建一个实现类,名为 HBookBizImpl 

package com.junlinyi.biz.impl;
 
import com.junlinyi.biz.HBookBiz;
import com.junlinyi.mapper.HBookMapper;
import com.junlinyi.vo.HBookVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
/**
 * @author 君临沂
 * @site www.junlinyi.jly
 * @company 君氏集团
 * @create  2023-08-26 17:57
 */
@Service
public class HBookBizImpl implements HBookBiz {
 
    @Autowired
    private HBookMapper hBookMapper;
 
    @Override
    public HBookVo selectByBookId(Integer bid) {
        return hBookMapper.selectByBookId(bid);
    }
 
}

在测试类( Test01 )中增加以下测试方法及接口

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

结果为:

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

  
    
    
    
      
      
      
    
  
 
  

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

CategoryVo selectByCategoryId(@Param("cid") Integer cid);

创建一个接口名为 CategoryBiz :

package com.junlinyi.biz;
 
import com.junlinyi.vo.CategoryVo;
 
public interface CategoryBiz {
 
    CategoryVo selectByCategoryId( Integer cid);
 
}

在实现以上 CategoryBiz 接口,创建一个实现类,名为 CategoryBizImpl 

package com.junlinyi.biz.impl;
 
import com.junlinyi.biz.CategoryBiz;
import com.junlinyi.mapper.CategoryMapper;
import com.junlinyi.vo.CategoryVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
/**
 * @author 君临沂
 * @site www.junlinyi.jly
 * @company 君氏集团
 * @create  2023-08-26 18:00
 */
@Service
public class CategoryBizImpl implements CategoryBiz {
    @Autowired
    private CategoryMapper categoryMapper;
 
    @Override
    public CategoryVo selectByCategoryId(Integer cid) {
        return categoryMapper.selectByCategoryId(cid);
    }
 
}

在测试类( Test01 )中增加以下测试方法及接口 

    @Autowired
    private CategoryBiz categoryBiz;    
    @Test
    public void selectByCategoryId() {
        CategoryVo categoryVo = categoryBiz.selectByCategoryId(8);
        System.out.println(categoryVo);
        categoryVo.getBooks().forEach(System.out::println);
    }

结果为:

         好啦,今天的分享就到这了,希望能够帮到你呢!  

你可能感兴趣的:(mybatis)