Mybatis是数据库应用不可缺少的框架之一,下面要给大家介绍的就是mybatis中如何实现批量insert,一起来看看吧。
Mybatis常用批量insert
通常来说,myBatis批量插入数据到数据库一般会有两种方式:
1. xml方式
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.xxx.mapper.XXXRecordMapper"> <resultMap id="BaseResultMap" type="com.xxx.model.XXXRecord"> <id column="AutoId" property="autoid" jdbcType="BIGINT" /> <result column="UserId" property="userid" jdbcType="BIGINT" /> <result column="NoticedTime" property="noticedtime" jdbcType="TIMESTAMP" /> </resultMap> <sql id="Base_Column_List"> AutoId, UserId, NoticedTime </sql> <!-- myself:批量插入 --> <insert id="insertBatch" parameterType="java.util.List"> insert into T_XXXRecord (AutoId, UserId, NoticedTime) values <foreach collection="list" item="item" index="index" separator=","> (#{item.autoid,jdbcType=BIGINT}, #{item.userid,jdbcType=BIGINT}, #{item.noticedtime,jdbcType=TIMESTAMP}) </foreach> </insert> </mapper>
注:
collection属性:
1.如果传入的是单参数且参数类型是一个List的时候,collection属性值为list
2.如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array
3.如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map
2.注解方式:
这里我们需要在mapper接口中的方法上使用@InsertProvider注解:
@InsertProvider(type = BatchInsertDevice.class, method = "batchInsertDevice") void batchInsertDevice(@Param("list") ListdevList);
由于void batchInsertDevice(@Param("list")List
Parameter 'arg0' not found. Available parameters are [collection,list]异常)
public String batchInsertDevice(Map < string, list > map) { System.out.println("batchInsertDevice"); // 获取真正的参数 ListdevList = map.get("list"); StringBuilder sql = new StringBuilder(); sql.append("insert into device "); sql.append("(IMEI,deviceDetail) values"); for (int i = 0; i < devList.size(); i++) { //这里的list为在map中的key值 sql.append("(#{list[+" + i + "].IMEI},#{list[" + i + "].deviceDetail}"); if (i != devList.size() - 1) { sql.append(","); } else sql.append(";"); } System.out.println(sql.toString()); return sql.toString(); }
最后在service类上添加@Transactional注解就ok了。
以上就是mybatis批量插入数据的两种方式,你学会了吗?想了解更多java常见问答知识,可以来关注我们的网站噢。
推荐阅读: