package root.report.control.dict; import org.apache.ibatis.session.SqlSession; import root.report.db.DbFactory; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Date; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * @Auther: pccw * @Date: 2018/10/29 17:45 * @Description: */ /* 往自己本地mysql 當中插入10W條記錄 */ public class TestTwo { public static void main(String args[]) throws SQLException { SqlSession sqlSession = DbFactory.Open(DbFactory.FORM); // insert(sqlSession); insertTwo(sqlSession); } // 多線程案例 使用fix線程 規定為5個 public static void insertTwo(SqlSession sqlSession) throws SQLException { Connection conn = sqlSession.getConnection(); // 開始時間 Long begin = new Date().getTime(); final StringBuffer suffix = new StringBuffer(); // sql前綴 String prefix = "INSERT INTO test_dict (code,name) VALUES "; // 設置事務為非自動提交 conn.setAutoCommit(false); // 比起st,pst會更好些 PreparedStatement pst = (PreparedStatement) conn.prepareStatement("");//准備執行語句 final CountDownLatch count = new CountDownLatch(5); //相當線程執行計時器,await()讓線程等待,用countDown()消初始化數量。當數量等於0時線程喚醒 ExecutorService fixedThreadPool = Executors.newFixedThreadPool(5); //線程池 synchronized (fixedThreadPool) { for (int i = 1; i <= 5; i++) { final int index = i; if (i == 1) { fixedThreadPool.execute(new Runnable() { @Override public void run() { for (int j = 1; j < 10; j++) { // 構建SQL后綴 suffix.append("(" + j + "," + "'0000" + j + "'),"); } count.countDown(); } }); } else if (i == 2) { fixedThreadPool.execute(new Runnable() { @Override public void run() { for (int j = 10; j < 100; j++) { // 構建SQL后綴 suffix.append("(" + j + "," + "'000" + j + "'),"); } count.countDown(); } }); } else if (i == 3) { fixedThreadPool.execute(new Runnable() { @Override public void run() { for (int j = 100; j < 1000; j++) { // 構建SQL后綴 suffix.append("(" + j + "," + "'00" + j + "'),"); } count.countDown(); } }); } else if (i == 4) { fixedThreadPool.execute(new Runnable() { @Override public void run() { for (int j = 1000; j < 10000; j++) { // 構建SQL后綴 suffix.append("(" + j + "," + "'0" + j + "'),"); } count.countDown(); } }); } else { fixedThreadPool.execute(new Runnable() { @Override public void run() { for (int j = 10000; j <= 99999; j++) { // 構建SQL后綴 suffix.append("(" + j + "," + "'" + j + "'),"); } count.countDown(); } }); } } } try { count.await(); // 構建完整SQL String sql = prefix + suffix.substring(0, suffix.length() - 1); // 添加執行SQL pst.addBatch(sql); // 執行操作 pst.executeBatch(); // 提交事務 conn.commit(); // 頭等連接 pst.close(); conn.close(); // 結束時間 Long end = new Date().getTime(); System.out.println("10萬條數據插入花費時間 : " + (end - begin) + " ms"); System.out.println("插入完成"); } catch (InterruptedException e) { e.printStackTrace(); }finally { fixedThreadPool.shutdown(); } } // 測試使用 fetch 按照指定規格讀取數據 }