mybatis如何实现多表添加
时间: 2023-06-29 19:07:43 浏览: 49
Mybatis可以使用多种方式实现多表添加,以下是其中两种常用的方式:
1.使用嵌套查询
在mapper中编写嵌套查询语句,将多个表的数据查询出来,然后通过参数映射,将数据插入到对应的表中。具体实现步骤如下:
(1)编写嵌套查询语句,查询需要插入的数据
```
<select id="getUserAndOrder" parameterType="Integer" resultMap="userAndOrder">
select u.*, o.*
from user u
join orders o on u.id = o.user_id
where u.id = #{userId}
</select>
```
(2)定义结果映射
```
<resultMap id="userAndOrder" type="User">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
<collection property="orders" ofType="Order">
<id property="id" column="order_id"/>
<result property="price" column="price"/>
<result property="createTime" column="create_time"/>
</collection>
</resultMap>
```
(3)在mapper中定义插入操作
```
<insert id="addUserAndOrder" parameterType="User">
insert into user (name, age) values (#{name}, #{age})
insert into orders (user_id, price, create_time) values
<foreach collection="orders" item="order" separator=",">
(#{id}, #{order.price}, #{order.createTime})
</foreach>
</insert>
```
(4)在Java代码中调用mapper
```
User user = new User();
user.setName("test");
user.setAge(18);
List<Order> orders = new ArrayList<>();
Order order = new Order();
order.setPrice(100);
order.setCreateTime(new Date());
orders.add(order);
user.setOrders(orders);
userMapper.addUserAndOrder(user);
```
2.使用一对多关联
在数据库中建立表之间的一对多关系,然后在mapper中使用Mybatis的一对多映射方式,实现多表添加操作。具体实现步骤如下:
(1)在数据库中定义一对多关联
在订单表中添加用户ID外键,将订单表与用户表建立一对多关系。
(2)定义实体类
定义用户类和订单类,用户类中包含订单的集合。
(3)定义mapper
在用户mapper中定义添加用户和订单的操作。
```
<insert id="addUser" parameterType="User">
insert into user(name, age) values(#{name}, #{age})
</insert>
<insert id="addOrder" parameterType="Order">
insert into order(user_id, price, create_time) values(#{userId}, #{price}, #{createTime})
</insert>
```
(4)在Java代码中调用mapper
```
User user = new User();
user.setName("test");
user.setAge(18);
userMapper.addUser(user);
List<Order> orders = new ArrayList<>();
Order order = new Order();
order.setPrice(100);
order.setCreateTime(new Date());
order.setUserId(user.getId());
orders.add(order);
orderMapper.addOrder(order);
```