测试表结构如下
@Name
@Column(hump = true)
@ColDefine(type = ColType.CHAR, width = 10)
@Comment("节假日期")
private String date;
@Column(hump = true)
@ColDefine(type = ColType.INT, width = 3)
@Comment("类型 0-周末 1-节日")
private int restdayType;
@Column(hump = true)
@ColDefine(type = ColType.TIMESTAMP)
@Comment("创建时间")
private Date createTime;
org.nutz.dao.Dao.insert(),java.sql.Statement.execute()和java.sql.Statement.executeBatch()三种方式分别插入1000条和10000条数据
1.Dao.insert()
long start = System.currentTimeMillis();
Calendar c = Calendar.getInstance();
RestdayTable restday = new RestdayTable();
restday.setRestdayType(type);
for (int i = 0; i < 10000; i++) {
c.add(Calendar.DAY_OF_MONTH, 1);
restday.setDate(sdf.format(c.getTime()));
restday.setCreateTime(new Date());
dao().insert(restday);
}
long end = System.currentTimeMillis();
System.out.println("time is " + (end - start) + "ms");
1000
time is 2652ms
10000
time is 24188ms
2.Statement.execute()
try {
Connection con = dataSource.getConnection();
java.sql.Statement s = con.createStatement();
long start = System.currentTimeMillis();
Calendar c = Calendar.getInstance();
StringBuilder sql = new StringBuilder("insert into restday values('2017-12-14',1,'2017-01-01 00:00:00')");
for (int i = 0; i < 1000; i++) {
c.add(Calendar.DAY_OF_MONTH, 1);
sql.replace(28, 38, sdf.format(c.getTime()));
s.execute(sql.toString());
}
long end = System.currentTimeMillis();
System.out.println("time is " + (end - start) + "ms");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
1000
time is 2381ms
10000
time is 22363ms
3.Statement.executeBatch()
1000
time is 1827ms
10000
time is 14349ms
技术水平有限 测试方式可能不严谨的地方。每个用例跑了10次左右,结果相差不大,执行时间上大概就是org.nutz.dao.Dao.insert()>java.sql.Statement.execute()>java.sql.Statement.executeBatch()。
我猜可能是Dao.insert()在插入之前做过一些校验花费了不少时间(没看过源码),如果有大神能说明原理的还希望在评论区不吝赐教