一对多、多对一、批量插入

我们有遇到的对象关系通常是复杂的,每个对象并不是单独的。比如学生和老师之间关系,一个老师有多个学生,每个学生会对应一个老师,这种关系其实就是一对多的关系。Mybatis在处理这种关系的时候,也是有自己的办法的。接下来就讲述一下处理一对多关系的映射。

1、先捋清楚一和多的ER模型以及数据库表

2.创建对应的实体java对象

3.为每个对象配置映射文件

 例如我要分别插入foodid psifoodid weight

parameterType
parameterType: 接口中方法参数的类型, 类型的完全限定名或别名。这个属性是可选的,因为 MyBatis可以推断出具体传入语句的参数,默认值为未设置(unset)。接口中方法的参数从 java 代码传入到mapper 文件的 sql 语句。

int 或 java.lang.Integer
hashmap 或 java.util.HashMap
list 或 java.util.ArrayList
student 或 com.bjpowernode.domain.Student

<select>,<insert>,<update>,<delete>都可以使用 parameterType 指定类型。

 seviceimpl层

MyBatis可以通过foreach标签来处理一对多批量插入。 假设我们有两个表:订单表(order)和订单商品表(order_item),它们之间是一对多的关系,一个订单可以对应多个订单商品。我们需要在插入一个订单的同时,批量插入它所对应的多个订单商品。 首先,我们需要在Order实体类中添加一个List<OrderItem>类型的属性,表示它所对应的多个订单商品。 ```java public class Order { private Integer id; private String orderNo; private List<OrderItem> orderItems; // getter/setter } ``` 然后,在OrderMapper.xml中,我们可以使用foreach标签来实现批量插入: ```xml <insert id="insertOrder" parameterType="Order"> insert into order(order_no) values (#{orderNo}) </insert> <insert id="insertOrderItems" parameterType="Order"> <foreach collection="orderItems" item="item" separator=";"> insert into order_item(order_id, item_name, item_price) values (#{id}, #{item.name}, #{item.price}) </foreach> </insert> ``` 其中,第一个insert标签用于插入订单信息,第二个insert标签用于批量插入订单商品信息。在第二个insert标签中,我们使用了foreach标签,遍历了Order实体类中的orderItems属性,将每个订单商品插入到数据库中。 最后,我们可以在OrderMapper.java中定义一个insertOrder方法,该方法会依次调用insertOrder和insertOrderItems两个SQL语句: ```java public interface OrderMapper { int insertOrder(Order order); } ``` 调用方式如下: ```java Order order = new Order(); order.setOrderNo("20201015001"); List<OrderItem> orderItems = new ArrayList<>(); orderItems.add(new OrderItem("商品1", 100)); orderItems.add(new OrderItem("商品2", 200)); orderItems.add(new OrderItem("商品3", 300)); order.setOrderItems(orderItems); orderMapper.insertOrder(order); ``` 这样,就可以实现一对多批量插入了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值