mybatis向多个表插数据
时间: 2023-08-11 15:38:17 浏览: 154
mybatis-plus-join是mybatis plus的一个多表插件
MyBatis可以向多个表插入数据,可以使用多个insert语句或者使用MyBatis的批量插入功能。
1. 使用多个insert语句
在mapper.xml文件中,可以定义多个insert语句,每个insert语句对应一个表。例如,假设我们要向表A和表B插入数据,可以定义以下两个insert语句:
```
<insert id="insertIntoTableA" parameterType="com.example.TableA">
insert into table_a (column1, column2) values (#{column1}, #{column2})
</insert>
<insert id="insertIntoTableB" parameterType="com.example.TableB">
insert into table_b (column3, column4) values (#{column3}, #{column4})
</insert>
```
然后在Java代码中,可以分别调用这两个insert语句:
```
TableA tableA = new TableA();
tableA.setColumn1("value1");
tableA.setColumn2("value2");
sqlSession.insert("insertIntoTableA", tableA);
TableB tableB = new TableB();
tableB.setColumn3("value3");
tableB.setColumn4("value4");
sqlSession.insert("insertIntoTableB", tableB);
```
2. 使用MyBatis的批量插入功能
MyBatis提供了批量插入的功能,可以一次性向多个表插入数据。使用方法如下:
在mapper.xml文件中,定义一个insert语句,使用MyBatis的foreach标签将要插入的数据列表遍历并插入到对应的表中。例如,假设要向表A和表B插入多条数据,可以定义以下insert语句:
```
<insert id="batchInsert" parameterType="java.util.List">
<foreach collection="list" item="item" index="index">
<choose>
<when test="item instanceof TableA">
insert into table_a (column1, column2) values (#{item.column1}, #{item.column2})
</when>
<when test="item instanceof TableB">
insert into table_b (column3, column4) values (#{item.column3}, #{item.column4})
</when>
</choose>
</foreach>
</insert>
```
然后在Java代码中,可以将要插入的数据列表传入这个insert语句中进行批量插入:
```
List<Object> list = new ArrayList<>();
TableA tableA1 = new TableA();
tableA1.setColumn1("value1");
tableA1.setColumn2("value2");
list.add(tableA1);
TableA tableA2 = new TableA();
tableA2.setColumn1("value3");
tableA2.setColumn2("value4");
list.add(tableA2);
TableB tableB1 = new TableB();
tableB1.setColumn3("value5");
tableB1.setColumn4("value6");
list.add(tableB1);
TableB tableB2 = new TableB();
tableB2.setColumn3("value7");
tableB2.setColumn4("value8");
list.add(tableB2);
sqlSession.insert("batchInsert", list);
```
阅读全文