基于通用mapper下,处理批量插入数据库耗时问题

一、基本操作(只写关键步骤)

1.数据库连接

jdbc.url=jdbc:mysql://localhost:3306/test?rewriteBatchedStatements=true

2.配置实体类

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.yanankk.mapper"/>
</bean>

3.配置SqlSessionTemplate

   <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" scope="prototype">
        <constructor-arg index="0" ref="sqlSessionFactory"/>
   </bean>

4.实体类(以MySQL为例,不使用主键生成策略)

@Table(name = "t_user")
public class User{

/** 主键id */
@Id
//@GeneratedValue(strategy = GenerationType.IDENTITY)
//或者使用:@GeneratedValue(strategy = GenerationType.IDENTITY,generator="JDBC")
private Long id

5.对应mapper

public interface UserMapper extends Mapper<User> {
}

6.业务代码

    // 开启批处理,关闭自动提交
    SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);
    //  获取mapper
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    for (int i = 0; i < 10000; i++) {     
         User user= new User();     
         User.setName("测试" + i);      
         mapper.insert(user);
     }
     //提交 清除缓存 
    sqlSession.commit(); 
    sqlSession.clearCache();

7.结果

一共插入时间:1364 ms
### 回答1: mapper自带的批量插入方法是MyBatis框架提供的一种快速向数据库中插入多条记录的方式。这个方法可以一次性处理多个对象的插入操作,减少了与数据库的交互次数,提高了插入的效率。 使用mapper自带的批量插入方法,需要传入一个对象的集合作为参数。这个集合中的每个对象表示一个要插入的记录。在执行插入操作时,框架会自动将集合中的每个对象转化为对应的插入语句,从而实现批量插入。 与传统的单条插入相比,mapper自带的批量插入方法具有以下优点: 1. 提高了数据库的插入效率,减少了与数据库的交互次数。 2. 简化了代码,减少了重复的插入操作,提高了开发效率。 3. 对于大量数据的插入,使用批量插入方法可以有效地降低系统的负载和资源消耗。 不过,在使用mapper自带的批量插入方法时,也需要注意以下几点: 1. 插入的对象必须是相同的类型,且对象的属性与数据库表的字段对应。 2. 每个对象的属性值不能为null,否则会报错。 3. 在插入大量数据时,可能会导致数据库连接超时或内存溢出等问题,需要根据具体情况进行性能优化。 总之,mapper自带的批量插入方法是一种方便快捷的插入数据的方式,能够提高数据库插入的效率和开发效率,适用于批量插入大量数据的场景。 ### 回答2: mapper自带的批量插入方法是指在使用MyBatis的Mapper接口操作数据库时,可以使用MyBatis提供的批量插入方法,一次性插入多条数据。 在MyBatis中,我们可以通过使用Mapper接口的`insertList`方法来实现批量插入。该方法接收一个List作为参数,List中的每个元素都是要插入的对象。 使用Mapper自带的批量插入方法有以下几个好处: 1. 效率更高:使用批量插入方法可以减少与数据库的交互次数,提高插入数据的效率。这样可以有效地减少数据库的负载,提高系统的整体性能。 2. 简便快捷:使用批量插入方法可以简化程序开发过程,减少编写插入语句的工作量。只需将要插入的对象封装到一个List中,然后调用MapperinsertList方法即可。 3. 可维护性高:使用Mapper自带的批量插入方法可以使代码更加易读、易维护。通过统一的接口方法,可以减少代码冗余,提高代码的复用性。 需要注意的是,批量插入方法只适用于使用相同的插入语句插入多条记录的情况。如果在批量插入过程中有某条插入失败,整个批量插入操作将会被回滚。因此,在进行批量插入前,需要确保要插入的数据的有效性,以避免数据插入异常。 ### 回答3: mapper自带的批量插入方法是MyBatis框架中的一种快速插入数据的功能。通过这种方法,可以批量插入多条数据,提高数据插入的效率。 使用mapper自带的批量插入方法,我们首先需要定义一个插入语句,在插入语句中使用批量插入的语法。接下来,在mapper接口中定义一个批量插入的方法,并将插入语句的ID作为该方法的参数。在使用时,通过调用该方法并传入需要插入的数据列表,即可实现批量插入。 对于大量数据的插入操作,使用mapper自带的批量插入方法相比于逐条插入的方式,其性能表现更佳。这是因为批量插入可以减少与数据库的交互次数,从而节省了网络带宽和数据库连接资源的开销。同时,批量插入还可以利用数据库批量插入功能,提高数据的插入速度。 需要注意的是,使用批量插入方法时,我们需要保证插入的数据格式正确,即数据的顺序与插入语句定义的列顺序一致,并且数据的类型与列的类型相匹配。此外,如果插入的数据中存在重复的记录,需要注意数据库中是否已经设置了主键或唯一索引约束,以避免插入重复数据造成的异常。 总而言之,mapper自带的批量插入方法是一种便捷且高效的数据插入方式,适用于需要插入大量数据的场景,能够极大地提升插入数据的效率。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值