目录
一.什么是关联关系映射
二.一对一映射
2.1.数据库创建
2.2.配置文件
2.3.代码生成
2.4.编写测试
三.一对多关联映射
四.多对多关联映射
好啦,今天的分享就到这了,希望能够帮到你呢!
关联关系映射通常指的是将一个实体与另一个或多个实体之间的关联关系进行映射和建模的过程。在数据库设计和数据建模中,关联关系映射是很重要的一部分。它可以通过关系型数据模型中的外键或者其他方式来表示不同实体之间的关系。
例如,在一个图书馆的数据库中,可以建立一个关联关系映射将图书和读者之间的借阅关系进行记录,即每本书都通过一个特定的标识符与借阅者相关联。这个关联关系映射可以用关系型数据库的表来表示,其中包括图书表和读者表,通过一个外键或者中间表来记录借阅关系。
关联关系映射也可以用于其他领域,如软件开发中的对象关系映射(ORM),用于将对象与数据库表之间的关联关系进行映射;或者在数据分析和机器学习中,用于构建特征与目标变量之间的关联关系
对一映射是指在两个集合之间,每个元素都只对应另一个集合中的一个元素。换句话说,每个元素在映射中都有唯一的对应关系。
在数据库设计和数据建模中,一对一映射通常用于将两个实体之间的关系表示为一对一的关系。例如,在一个学校的数据库中,可以建立一个一对一的映射将学生和学生身份信息进行关联。每个学生在映射中都有唯一的学生身份信息记录。
一对一映射也可以在编程中应用。例如,在某些编程语言中,可以使用数据结构如字典(dict)或映射(map)来实现一对一的映射关系。
实例演示:
创建名为 t_hibernate_book (书籍表) 数据表:
创建名为 t_hibernate_book_category (书籍类别表) 数据表
其中名为 bid 的属性字段为 t_hibernate_book (书籍表) 的 bid(主键) 的外键
其中名为 cid 的属性字段为 t_hibernate_category (类别表) 的 category_id (主键) 的外键:
创建名为 t_hibernate_category (类别表) 数据表:
创建名为 t_hibernate_order (订单表) 数据表:
创建名为 t_hibernate_order_item (订单详情表) 数据表
其中名为 order_id 的属性字段为 t_hibernate_order (订单表) 的 oid (主键) 的外键:
修改名为 generatorConfig.xml 的 配置文件,修改后的所有代码如下 :
配置好 generatorConfig.xml 的配置文件后进行,自动生成代码,操作如图 :
代码生成后就会出现以下的实体类对象,配置文件,接口类,如图 :
然后将每个实体类对象里面重写一下toString()方法
创建一个 名为 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); }
结果为如图 :
在自动生成的 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); }
结果为: