准备
`
create table T_DQS_DATA_CRITERION_PAGE
(
ID VARCHAR2(32) not null
constraint T_DQS_DATA_CRITERION_PAGE_PK
primary key,
DATA_CRITERION_PRIMARY_ID VARCHAR2(32) not null,
IS_ASSOCIATE NUMBER,
FILE_NAME VARCHAR2(512) not null,
FILE_SAVE_NAME VARCHAR2(512) not null,
FILE_TYPE VARCHAR2(32) not null,
FILE_IMG_TYPE NUMBER,
FILE_PATH VARCHAR2(1024) not null,
FILE_SERVER_IP VARCHAR2(128),
FILE_SERVER_PORT VARCHAR2(128),
CREATE_USER VARCHAR2(32),
MODIFY_USER VARCHAR2(32),
DELETE_STATUS NUMBER,
DATA_ACCESS_CODE VARCHAR2(32),
CREATE_TIME DATE,
MODIFY_TIME DATE
)
``
这是尝试玩玩的6种方式。
1基本for循环拆入,手写SQL跟mybatis框架的save是一样的
手写sql跟mybatis框架的save方法是一个效果。
2xml里写for循环结果
这是网传最多的一种,其实有点垃圾。
3 xml里begin end for循环
这也网传较多的一种。不是很好。
4 mybatis框架的saveBatch方法
这种跟网上手写的应该是一样的,哈哈。
至少可以完全不用写啥代码了。
5 sqlSessionFactory 方法
这是我试的最快的一种方法,可能数据量不大吧。
6 jdbc 底层连接的的批处理
public void testJdbcBatch(List<DataCriterionPage> list) {
long t1 = System.currentTimeMillis();
String url = "jdbc:p6spy:oracle:thin:@172.18.21.50:1521/orcl2150";
String user = "GZ_DATA_CONTROL";
String password = "GZ_DATA_CONTROL#ZZYC202009";
Connection conn = null;
PreparedStatement pstm = null;
ResultSet rt = null;
try {
Class.forName("com.p6spy.engine.spy.P6SpyDriver");
conn = DriverManager.getConnection(url, user, password);
String sql = "insert into T_DQS_DATA_CRITERION_PAGE(\n" +
" ID,DATA_CRITERION_PRIMARY_ID,IS_ASSOCIATE,FILE_NAME,FILE_SAVE_NAME,FILE_TYPE,FILE_IMG_TYPE,\n" +
" FILE_PATH,FILE_SERVER_IP,FILE_SERVER_PORT,CREATE_TIME,CREATE_USER,\n" +
" MODIFY_TIME,MODIFY_USER,DELETE_STATUS,DATA_ACCESS_CODE\n" +
" ) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
pstm = conn.prepareStatement(sql);
conn.setAutoCommit(false);
for (DataCriterionPage dataCriterionPage : list) {
pstm.setString(1, dataCriterionPage.getId());
pstm.setString(2, dataCriterionPage.getDataCriterionPrimaryId());
pstm.setInt(3, dataCriterionPage.getIsAssociate());
pstm.setString(4, dataCriterionPage.getFileName());
pstm.setString(5, dataCriterionPage.getFileSaveName());
pstm.setString(6, dataCriterionPage.getFileType());
pstm.setInt(7, dataCriterionPage.getFileImgType());
pstm.setString(8, dataCriterionPage.getFilePath());
pstm.setString(9, dataCriterionPage.getFileServerIp());
pstm.setString(10, dataCriterionPage.getFileServerPort());
pstm.setDate(11, new java.sql.Date(dataCriterionPage.getCreateTime().getTime()));
pstm.setString(12, dataCriterionPage.getCreateUser());
pstm.setDate(13, new java.sql.Date(dataCriterionPage.getCreateTime().getTime()));
pstm.setString(14, dataCriterionPage.getModifyUser());
pstm.setInt(15, 1);
pstm.setString(16, "");
pstm.addBatch();
}
pstm.executeBatch();
conn.commit();
long t2 = System.currentTimeMillis();
long t3 = t2 - t1;
log.info("[插入时间]->[end-start]->[{}]", (t3));
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
if (pstm != null) {
try {
pstm.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
}
这个我测试得也不是很快,不知道是不是没有写成静态加载类对象的问题,或者工具类获取连接,静态会与Springboot项目发生事务冲突。