通用批量插入:表名动态,批量,字段动态
mapper接口
int insertData(@Param("tableName") String tableName, @Param("dataList") List<Map<String, Object>> dataList);
tableName:表名
dataList:要插入的集合
在yml数据库配置加上这一段,在连接数据库的配置中添加 &allowMultiQueries=true
可以允许执行多个SQL查询
allowMultiQueries=true
xml文件
<insert id="insertData" parameterType="java.util.List">
<foreach collection="dataList" item="item" index="index" separator=";">
INSERT INTO ${tableName}
(
<foreach collection="item" index="key" item="value" separator=",">
${key}
</foreach>
)
values
(
<foreach collection="item" index="key" item="value" separator=",">
#{value}
</foreach>
)
</foreach>
</insert>
(ps)当然,在插入表数据之前可以先判断一下数据库是否有这个表
mapper
//查询表是否存在
Integer isTableExist(String tableName);
xml
<select id="isTableExist" resultType="java.lang.Integer">
SELECT COUNT(*) FROM information_schema.tables WHERE table_name = #{tableName}
</select>
tableName为表名
information_schema.tables
是一个特殊的系统表,它存储了关于数据库中所有表的元数据信息,如表名、列信息、约束等。通过从这个表中查询,我们可以获取有关数据库中所有表的信息。
(完)