Java实现几十万条数据插入实例教程(30万条数据插入MySQL仅需13秒)

这篇文章主要给大家介绍了关于Java如何实现几十万条数据插入的相关资料,30万条数据插入MySQL仅需13秒,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

本文主要讲述通过MyBatis、JDBC等做大数据量数据插入的案例和结果。

CREATE TABLE `t_user` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户id', `username` varchar(64) DEFAULT NULL COMMENT '用户名称', `age` int(4) DEFAULT NULL COMMENT '年龄', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户信息表'; 

话不多说,开整!

实体类、mapper和配置文件定义

User实体

/** * 

用户实体

* * @Author zjq * @Date 2021/8/3 */ @Data public class User { private int id; private String username; private int age; }

mapper接口

public interface UserMapper { /** * 批量插入用户 * @param userList */ void batchInsertUser(@Param("list") List userList); }

mapper.xml文件

     insert into t_user(username,age) values  ( #{item.username}, #{item.age} ) 

jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/test jdbc.username=root jdbc.password=root 

sqlMapConfig.xml

       

不分批次直接梭哈

MyBatis直接一次性批量插入30万条,代码如下:

    @Test public void testBatchInsertUser() throws IOException { InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); SqlSession session = sqlSessionFactory.openSession(); System.out.println("===== 开始插入数据 ====="); long startTime = System.currentTimeMillis(); try { List userList = new ArrayList<>(); for (int i = 1; i <= 300000; i++) { User user = new User(); user.setId(i); user.setUsername("共饮一杯无 " + i); user.setAge((int) (Math.random() * 100)); userList.add(user); } session.insert("batchInsertUser", userList); // 最后插入剩余的数据 session.commit(); long spendTime = System.currentTimeMillis()-startTime; System.out.println("成功插入 30 万条数据,耗时:"+spendTime+"毫秒"); } finally { session.close(); } } 

可以看到控制台输出:

Cause: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (27759038 >yun 4194304). You can change this value on the server by setting the max_allowed_packet’ variable.

超出最大数据包限制了,可以通过调整max_allowed_packet限制来提高可以传输的内容,不过由于30万条数据超出太多,这个不可取,梭哈看来是不行了

以上就是Java实现几十万条数据插入实例教程(30万条数据插入MySQL仅需13秒)的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » Java