mybatis配置文件里面sql寫法(因為是oracle數據庫,所以statement的寫法和 MySQL 有些不同)
<!-- 批量插入用戶 -->
<insert id="insertUserByBatch" parameterType="java.util.List">
INSERT INTO TEST1
(NAME,AGE)
SELECT A.*
FROM(
<foreach collection="list" item="test1" index="index"
separator="UNION ALL">
SELECT
#{test1.name,jdbcType=VARCHAR},
#{test1.age,jdbcType=INTEGER}
FROM dual
</foreach>
) A
</insert>
service層
public void insertUserByBatch(List<Test1> list) {
// TODO Auto-generated method stub
// 2.分頁數據信息
int totalSize = list.size(); // 總記錄數
int pageSize = 1000; // 每頁N條 1000條每次 測試10w條 大概3s多
int totalPage = totalSize / pageSize; // 共N頁
if (totalSize % pageSize != 0) {
totalPage += 1;
if (totalSize < pageSize) {
pageSize = list.size();
}
}
long befortime = System.currentTimeMillis();
//臨時list
List<Test1> tempList = new ArrayList<Test1>();
for (int pageNum = 1; pageNum < totalPage + 1; pageNum++) {
int starNum = (pageNum - 1) * pageSize;
int endNum = pageNum * pageSize > totalSize ? (totalSize) : pageNum * pageSize;
System.out.println("起始:" + starNum + "-" + endNum );
for (int i = starNum; i < endNum; i++) {
tempList.add(list.get(i));
}
userMapper.insertUserByBatch(tempList);
tempList.clear();
System.out.println("success!");
}
long aftertime = System.currentTimeMillis();
System.out.println("castime:" + (aftertime - befortime) + " ms");
}