目录
前言
1.一对一的映射关系
1.1 创建模型类和Vo类
1.2 配置当前模型类的mapper.xml
1.3 开始测试
2.一对多的映射关系
2.1 创建模型类和Vo类
2.2 配置当前模型类的mapper.xml
2.3 开始测试
3.多对多的映射关系
总结
注意点:
前言
一对一映射(One-to-One Mapping):
- 一对一关系指的是两个实体之间存在严格的一对一对应关系。
- 可以通过在对象之间定义关联属性和外键字段来实现一对一映射。
- 比如,在数据库中有一个
user
表和一个user_profile
表,通过在user
对象中定义一个UserProfile
属性,并在user_profile
表中定义一个外键字段user_id
来实现一对一映射。一对多映射(One-to-Many Mapping):
- 一对多关系指的是一个实体对象关联多个实体对象。
- 可以通过在对象之间定义关联属性和外键字段来实现一对多映射。
- 比如,在数据库中有一个
order
表和一个order_item
表,通过在order
对象中定义一个List<OrderItem>
属性,并在order_item
表中定义一个外键字段order_id
来实现一对多映射。多对一映射(Many-to-One Mapping):
- 多对一关系指的是多个实体对象关联一个实体对象。
- 可以通过在对象之间定义关联属性和外键字段来实现多对一映射。
- 比如,在数据库中有一个
order_item
表和一个product
表,通过在OrderItem
对象中定义一个Product
属性,并在order_item
表中定义一个外键字段product_id
来实现多对一映射。多对多映射(Many-to-Many Mapping):
- 多对多关系指的是多个实体对象相互关联。
- 在数据库中,多对多关系需要通过一个中间表来实现。
- 可以通过在对象之间定义关联集合属性来实现多对多映射。
- 比如,在数据库中有一个
student
表和一个course
表,通过在Student
对象中定义一个List<Course>
属性,并在中间表中存储对应的关联关系来实现多对多映射。以上是一些常见的关系映射方式,MyBatis提供了多种配置方式来支持这些关系映射,包括XML配置文件和注解。通过使用适当的配置和映射规则,MyBatis可以将数据库中的数据映射到Java对象中,使得数据的访问和操作更加便捷。
1.一对一的映射关系
一对一关系(One-to-One)表示两个实体对象之间存在唯一的关联关系。例如,一个学生只能拥有一个身份证。在 MyBatis 中,我们可以使用结果嵌套或一对一映射来处理一对一关系。
1.1 创建模型类和Vo类
package com.YU.model;
public class OrderItem {
private Integer orderItemId;
private Integer productId;
private Integer quantity;
private Integer oid;
public OrderItem(Integer orderItemId, Integer productId, Integer quantity, Integer oid) {
this.orderItemId = orderItemId;
this.productId = productId;
this.quantity = quantity;
this.oid = oid;
}
public OrderItem() {
super();
}
public Integer getOrderItemId() {
return orderItemId;
}
public void setOrderItemId(Integer orderItemId) {
this.orderItemId = orderItemId;
}
public Integer getProductId() {
return productId;
}
public void setProductId(Integer productId) {
this.productId = productId;
}
public Integer getQuantity() {
return quantity;
}
public void setQuantity(Integer quantity) {
this.quantity = quantity;
}
public Integer getOid() {
return oid;
}
public void setOid(Integer oid) {
this.oid = oid;
}
}
package com.YU.vo;
import com.YU.model.Order;
import com.YU.model.OrderItem;
/**
* @author YU
* @create 2023-09-04 9:31
*/
public class OrderItemVo extends OrderItem {
private Order order;
public Order getOrder() {
return order;
}
public void setOrder(Order order) {
this.order = order;
}
}
1.2 配置当前模型类的mapper.xml
<resultMap id="OrderItemVoMap" type="com.YU.vo.OrderItemVo">
<result column="order_item_id" property="orderItemId"></result>
<result column="product_id" property="productId"></result>
<result column="quantity" property="quantity"></result>
<result column="oid" property="oid"></result>
<association property="order" javaType="com.YU.model.Order">
<result column="order_id" property="orderId"></result>
<result column="order_no" property="orderNo"></result>
</association>
</resultMap>
<select id="selectByOrderItemId" parameterType="OrderItemVoMap" parameterMap="java.lang.Integer">
SELECT * FROM t_hibernate_order o,t_hibernate_order_item oi
where o.order_id = oi.oid and oi.order_item_id = #{oiid}
</select>
1.3 开始测试
省略了业务逻辑层的编写,这里使用junit直接进行测试
package com.YU.biz.Impl;
import com.YU.biz.OrderItemBiz;
import com.YU.vo.OrderItemVo;
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 YU
* @create 2023-09-04 9:49
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:spring-context.xml"}
)
public class OrderTest {
@Autowired
private OrderItemBiz orderItemBiz;
@Test
public void selectOrderItemId(){
OrderItemVo orderItemVo = orderItemBiz.selectByOrderItemId(27);
System.out.println(orderItemVo);
System.out.println(orderItemVo.getOrder());
}
}
2.一对多的映射关系
一对多关系(One-to-Many)表示一个实体对象(一的一方)可以与多个相关实体对象(多的一方)建立关联。例如,一个部门可以有多个员工。在 MyBatis 中,我们可以使用嵌套查询或结果映射来处理一对多关系。
2.1 创建模型类和Vo类
package com.YU.model;
import lombok.ToString;
@ToString
public class Order {
private Integer orderId;
private String orderNo;
public Order(Integer orderId, String orderNo) {
this.orderId = orderId;
this.orderNo = orderNo;
}
public Order() {
super();
}
public Integer getOrderId() {
return orderId;
}
public void setOrderId(Integer orderId) {
this.orderId = orderId;
}
public String getOrderNo() {
return orderNo;
}
public void setOrderNo(String orderNo) {
this.orderNo = orderNo;
}
}
package com.YU.vo;
import com.YU.model.Order;
import com.YU.model.OrderItem;
import java.util.ArrayList;
import java.util.List;
/**
* @author YU
* @create 2023-09-04 9:31
*/
public class OrderVo extends Order {
private List<OrderItem> OrderItems = new ArrayList<>();
public List<com.YU.model.OrderItem> getOrderItem() {
return OrderItems;
}
public void setOrderItem(List<com.YU.model.OrderItem> OrderItems) {
this.OrderItems = OrderItems;
}
}
2.2 配置当前模型类的mapper.xml
<resultMap id="OrderVoMap" type="com.YU.vo.OrderVo">
<result column="order_id" property="orderId"></result>
<result column="order_no" property="productId"></result>
<collection property="orderItems" ofType="com.YU.model.Order">
<result column="order_item_id" property="orderItemId"></result>
<result column="product_id" property="productId"></result>
<result column="quantity" property="quantity"></result>
<result column="oid" property="oid"></result>
</collection>
</resultMap>
<select id="selectByOid" resultMap="OrderVoMap" parameterType="java.lang.Integer">
SELECT * FROM t_hibernate_order o,t_hibernate_order_item oi
where o.order_id = oi.oid and o.order_id = #{oid}
</select>
2.3 开始测试
@Autowired
private OrderBiz orderBiz;
@Test
public void selectByOid(){
OrderVo orderVo = orderBiz.selectByOid(7);
System.out.println(orderVo);
orderVo.getOrderItem().forEach(System.out::println);
}
3.多对多的映射关系
多对多的映射关系是指两个实体之间存在多对多的关系,其中一个实体可以关联多个另一个实体,而另一个实体也可以关联多个第一个实体。
在关系型数据库中,多对多的关系需要通过中间表(也称为连接表)来实现。中间表包含两个外键关联到两个实体的主键,用于记录它们之间的关系。
总结
在 MyBatis 中,映射关系是指数据库表和 Java 对象之间的映射配置,用于将查询结果映射到 Java 对象或将 Java 对象的属性映射到数据库表的列
基于 XML 的映射方式:文章来源:https://www.toymoban.com/news/detail-700348.html
- 使用
<resultMap>
元素配置结果集的映射关系,指定数据库列和 Java 对象属性之间的映射。- 可以使用
<result>
元素将数据库列映射到 Java 对象的属性,并指定属性的类型、映射关系及相关配置。- 可以使用
<association>
元素配置关联对象的映射关系,用于映射复杂对象之间的关系。- 可以使用
<collection>
元素配置集合类型对象的映射关系,用于映射一对多或多对多的关系。- 使用
<sql>
元素定义可重用的 SQL 片段,提供了组织和共享 SQL 语句的能力。
注意点:
- 确保数据库表和 Java 对象的属性名称、类型一致,以便正确地映射数据。
- 配置正确的映射关系,确保查询结果能正确映射到 Java 对象,或对象的属性能正确映射到数据库表。
- 对于复杂的关联关系,需要配置适当的映射关系,以便处理关联对象之间的关系。
正确配置映射关系可以提高数据的访问效率和开发效率,使数据库表和 Java 对象之间的转换更加方便和灵活。文章来源地址https://www.toymoban.com/news/detail-700348.html
到了这里,关于Mybatis中的关系映射的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!