一、问题描述
以Springboot开发微服务应用中,通过Mybatis批量插入数据到数据库中,包括MySQL和Oracle两种。
二、解决方法
1.MySQL
在Mapper中接口方法如下:
void addInfo(List<PersonInfo> info);
在XML文件添加内容如下:
<insert id="addInfo" parameterType="java.util.List" useGeneratedKeys="false">
insert into personinfo (id,name,info) values
<foreach collection="list" item="info" separator=",">
(#{info.id}, #{info.name}, #{info.info})
</foreach>
</insert >
对collection的属性:
1. 若传入的为单参数且参数类型是一个List的时候,collection属性值为list;
2. 若传入的为单参数且参数类型是一个array数组的时候,collection的属性值为array;
3. 若传入的参数为多个的时候,需要把它们封装成一个Map,也可为单参数。
item:表示集合中每一个元素进行迭代时的别名,
index:指定一个名字,用于表示在迭代过程中,每次迭代到的位置,
open:表示该语句以什么开始,
separator:表示在每次进行迭代之间以什么符号作为分隔 符,
close:表示以什么结束。
2.Oracle
在Oracle中的语句和MySQL的略有区别,记录如下:
void insertId(@Param("infolist")List<BasicResource> res);
在XML文件中配置如下:
<insert id="insertId" parameterType="java.util.List" useGeneratedKeys="false">
INSERT INTO COM_RES_MAP (FUNC_ID,MODULE_ID,APPLICATION_ID)
<foreach item="res" index="index" collection="infolist" separator="union all">
(
SELECT #{res.funcId}, #{res.modId},#{res.appId} FROM DUAL
)
</foreach>
</insert>
*注意:此处插入语句中没有Values,foreach中的语句,collection的值等都与MYSQL的有区别。
参考文献: