Java快速迁移脚本中的数据到数据库

mybatis-flex、oracle、beecp、hutool

创建一个Java的Maven工程,添加依赖。

<dependency>
  <groupId>com.mybatis-flex</groupId>
  <artifactId>mybatis-flex-core</artifactId>
  <version>1.11.6</version>
</dependency>
<dependency>
  <groupId>com.oracle.database.jdbc</groupId>
  <artifactId>ojdbc8</artifactId>
  <version>${oracle.version}</version>
</dependency>
<dependency>
  <groupId>com.alibaba.fastjson2</groupId>
  <artifactId>fastjson2</artifactId>
  <version>2.0.40</version>
</dependency>
<dependency>
  <groupId>cn.hutool</groupId>
  <artifactId>hutool-core</artifactId>
  <version>5.8.21</version>
</dependency>
<dependency>
  <groupId>com.github.chris2018998</groupId>
  <artifactId>beecp</artifactId>
  <version>4.2.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>1.7.36</version>
</dependency>
<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-classic</artifactId>
  <version>1.2.13</version>
</dependency>

Java代码

package top.lingkang;

import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.StrUtil;
import com.mybatisflex.core.MybatisFlexBootstrap;
import com.mybatisflex.core.row.Db;
import com.mybatisflex.core.row.Row;
import org.apache.ibatis.logging.nologging.NoLoggingImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.stone.beecp.BeeDataSource;
import org.stone.beecp.BeeDataSourceConfig;

import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * @author lingkang
 * created by 2026/4/9
 */
public class Move01 {
    private static AtomicInteger count = new AtomicInteger(0);
    private static final Logger log = LoggerFactory.getLogger(Move01.class);

    public static void main(String[] args) throws Exception {
        BeeDataSourceConfig config = new BeeDataSourceConfig();
        config.setDriverClassName("oracle.jdbc.OracleDriver");
        config.setJdbcUrl("jdbc:oracle:thin:@10.100.0.77:1521:zb?useUnicode=true&characterEncoding=UTF-8");
        config.setUsername("zbUser");
        config.setPassword("zbPassword");
        config.setMaxActive(20);
        BeeDataSource dataSource = new BeeDataSource(config);

        MybatisFlexBootstrap.getInstance()
                .setDataSource(dataSource)
//                .setLogImpl(StdOutImpl.class) //日志输出配置
                .setLogImpl(NoLoggingImpl.class)// 忽略日志
                .start();
        Row row = Db.selectOneBySql("select * from T_RESERVE where rownum = 1");
        System.out.println(row.toString());

        long start = System.currentTimeMillis();

        List<String> lines = FileUtil.readLines("C:\\Users\\Administrator\\Desktop\\XXXXX_202604091706.sql", StandardCharsets.UTF_8);
        final int total = lines.size();
        log.info("插入数据量:{}", total);
        // 分成20份
        List<List<String>> partition = ListUtil.partition(lines, 20);
        // 20个线程
        ExecutorService service = Executors.newFixedThreadPool(20);
        for (List<String> list : partition) {
            service.submit(() -> {
                for (String sql : list) {
                    if (StrUtil.isBlank(sql))
                        continue;
                    // 截去最后一个 ; 分号
                    Db.insertBySql(sql.substring(0, sql.length() - 1));
                    count.addAndGet(1);
                }
            });
        }

        // 用于观察进度
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 999; i++) {
                    ThreadUtil.sleep(2000);
                    log.info("当前插入数据: {} / {}", count.get(), total);
                    if (service.isTerminated()) {
                        log.info("耗时:{}ms", System.currentTimeMillis() - start);
                        break;
                    }
                }
            }
        });
        thread.start();

        // 处理完成就关闭
        service.shutdown();
    }
}