首页 > 其他分享 >Mybatis批量插入3种方法

Mybatis批量插入3种方法

时间:2022-12-21 13:00:15浏览次数:38  
标签:insert 批量 BIGINT 插入 sqlSession test foreach Mybatis 方法

原文链接:https://blog.csdn.net/qq_43486404/article/details/126637141

使用Mybatis框架批量插入的3种方法:多次调用insert方法、foreach标签、batch模式

一、 多次调用insert方法
每插入一条数据都调用一次insert方法,这种方法适用于数据量小时使用,频繁使用会浪费数据库资源。
1
二、 foreach标签
一次存入多条数据,使用方法如下:
1
<insert id="insert1" keyColumn="goods_id" keyProperty="goodsId" parameterType="com.shop.test.pojo.entity.test"
useGeneratedKeys="true">
insert into test (shop_id, test_type_id,)
values
<foreach collection="record" item="item" separator="," >
(#{item.shopId,jdbcType=BIGINT}, #{item.goodsTypeId,jdbcType=BIGINT})
</foreach>
</insert>`
1
2
3
4
5
6
7
8
三、 batch模式
一次存入多条数据,使用方法如下:
xml代码:
1
2
<insert id="insert" keyColumn="goods_id" keyProperty="goodsId" parameterType="com.shop.test.pojo.entity.test"
useGeneratedKeys="true">
insert into test (shop_id, test_type_id)
values
(#{shopId,jdbcType=BIGINT}, #{goodsTypeId,jdbcType=BIGINT})
</insert>
1
2
3
4
5
6
后端java代码:

//先引入
@Resource
private SqlSessionFactory sqlSessionFactory;
//具体实现
SqlSession sqlSession=sqlSessionFactory.openSession(ExecutorType.BATCH);
List<test> insertlist=new ArrayList<>();
test test1=new test((long)1,(long)12);
for(int i=0;i<100000;i++){
insertlist.add(test1);
}
try{
Long mm=System.currentTimeMillis();
TestDao mapper=sqlSession.getMapper(TestDao.class);
insertlist.stream().forEach(e->{
mapper.insert(e);
});
sqlSession.clearCache();
sqlSession.commit();
}catch(Exception e){
System.out.println(e);
}finally{
sqlSession.close();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
四、三种方法比较
1)insert
适用于少量数据插入,每次使用都要调用数据库连接,频繁使用会浪费资源,效率低
2)foreach标签
使用foreach可以减少数据库连接的调用,效率比inser高
3)batch模式
当数据特别多时效率比foreach标签高

标签:insert,批量,BIGINT,插入,sqlSession,test,foreach,Mybatis,方法
From: https://www.cnblogs.com/fswhq/p/16954198.html

相关文章

  • mybatis-plus的select指定字段
    使用mapper的select相关方法时,我们来观察一下其生成的语句:我们注意到,生成的sql将表的全字段都查询出来了,相当于select*。众所周知,在实际的使用中是不推荐使用select*的......
  • mybatis-plus的自定义xml
    mybatis-plus中xml的使用方法和mybatis是一样,需要一些简单的配置就可以定义xml了。配置sql日志和mapper文件路径在application.properties中指定如下配置:其中mapper-......
  • MySQL 删除数据 批量删除(大量)数据
    在删除数据的时候根据不同的场景使用不同的方法,比如说删除表中部分数据、删除表的结构、删除所有记录并重置自增ID、批量删除大量数据等,可以使用delete、truncate、drop等......
  • MySQL 更新数据 不同条件(批量)更新不同值
    一般在更新时会遇到以下场景:1.全部更新;2.根据条件更新字段中的某部分内容;3.根据不同的条件更新不同的值,以下是几种场景中常用的update方法。一、方法分类二、具体用法(1......
  • MySQL 插入数据 数据重复 从另一个表导入数据
    当使用MySQL插入数据时,我们可以根据需求选择合适的插入语句。一、方法分类二、具体方法使用场景作用语句注意常规插入忽略字段名insertinto表名......
  • mybatis注解开发
    @Insert:实现新增@Update:实现更新@Delete:实现删除@Select:实现查询@Result:实现结果集封装@Results:可以与@Result一起使用,封装多个结果集@ResultMap:实现引用@Re......
  • MyBatis源码分析(二)prepareStatement预编译的执行流程
    通常我们如果自己写建立数据库连接的代码的时候,都会这么写pstmt=conn.prepareStatement(sql);pstmt.setString(1,email);result=pstmt.executeQuery();而Mybatis是怎么......
  • mybatis缓存
    Mybatis中缓存分为一级缓存,二级缓存。一级缓存一级缓存是SqlSession级别的缓存,只要SqlSession没有flush或close,它就存在默认开启并使用当调用SqlSession的修......
  • Python中利用exec批量生成变量
    转载自:https://blog.csdn.net/qq_41710383/article/details/115758160exec和eval的区别函数概括eval():函数用来执行一个字符串表达式,并返回表达式的值。注意:计算指......
  • mybatis-plus的分页
    mybatis-plus包含内置的分页插件,我们要做的就是配置拦截器,然后使用内置的分页类就可以了。配置Interceptor分页的使用QueryWrapper指定查询条件Page指定获取特定......