SpringBoot中使用mybatis将list集合插入到Oracle数据库(mybatis配置一次性插入,不需要在Java代码里写循环插入代码)
注意,此处是向mybatis中传入list,该list是所有需要插入数据库的记录条数(每条记录里只有一个字段).
本身自己是一个小菜鸡,尝试了很多种写法,参考了网上很多资料,发现至少是应用在自己的环境中,大部分的写法无法使用,于是写下此文.,也算对得起自己几个小时的工作量.开发环境是公司内网,所以大致是按照印象写的.如果错漏,请多包涵,欢迎留言!
技术环境
mybatis+springboot+Oracle
(此处说明是Oracle是因为mybatis对Oracle和MySQL写法上 有些情况下不太相同)
Services层
在serviceImp中,定义了myList数据,用于存储之后向数据库插入的list数组.
List<String> myList= new ArrayList<>();
我将前台传入的数据,处理后装入myList,再调用mapper.java里面定义的函数,将myList作为参数传入,传入参数的类型是list.
Dao层
- 在Mapper.java里面定义的函数,记得在参数列表前要加上@Param ,如下
(@Param List myList) - 使用的是mybatis,在Mapper.xml 中写sql语句.
<insert id="insertYHC" parameterType="list" useGeneratedKeys="false">
INSERT INTO oracle_table(tyc)
<foreach collection="myList" item="item" index="index" separator="union all">
SELECT
(#{item})
FROM DUAL
</foreach>
</insert>
Tips:
insert id="insertYHC" parameterType="list" useGeneratedKeys="false",,
id是mapper.java里对应的函数名,parameterType是该函数的参数类型,useGeneratedKeys="false"好像没什么用INSERT INTO oracle_table(tyc),,,
oracle_table是Oracle中的表名,tyc是里面的字段,!!!注意此处没有"Values"!!!<foreach collection="list" item="productRole" index="index" separator="union all">,,,
此处!!!注意collection中的list是你在mapper.java里对应的函数名里的参数名字,item中的item跟foreach里面的(#{item})对应上就行,大概跟我们那种for(item:items)遍历里面对象写法有类似之处,index="index"这句感觉也没啥用.注意!!!separator=“union all”,如果你像我一样,传的列表myList里面每个对象都是一个string,填union all.SELECT (#{item}) FROM DUAL,,
这里(#{item})对应上面的item就行,注意!!如果你像我一样传入的list每个对象都是一个字符串,那不需要再在item后加上".字段"了.- 最后说下,看百度上,Dual,简单的说就是一个空表,Oracle提供的最小的工作表,只有一行一列.