😜 TODAY Jdbc
GPL-3.0 License
Sql2o 改良版
<dependency>
<groupId>cn.taketoday</groupId>
<artifactId>today-jdbc</artifactId>
<version>1.0.0.RELEASE</version>
</dependency>
@Test
public void testFetch() {
createAndFillUserTable();
try (JdbcConnection con = jdbcOperations.open()) {
Date before = new Date();
List<User> allUsers = con.createQuery("select * from User").fetch(User.class);
assertNotNull(allUsers);
Date after = new Date();
long span = after.getTime() - before.getTime();
System.out.println(String.format("Fetched %s user: %s ms", insertIntoUsers, span));
// repeat this
before = new Date();
allUsers = con.createQuery("select * from User").fetch(User.class);
after = new Date();
span = after.getTime() - before.getTime();
System.out.println(String.format("Again Fetched %s user: %s ms", insertIntoUsers, span));
assertEquals(allUsers.size(), insertIntoUsers);
}
deleteUserTable();
}
@Test
public void testBatch() {
jdbcOperations.createQuery(
"create table User(\n" +
"id int identity primary key,\n" +
"name varchar(20),\n" +
"email varchar(255),\n" +
"text varchar(100))").executeUpdate();
String insQuery = "insert into User(name, email, text) values (:name, :email, :text)";
JdbcConnection con = jdbcOperations.beginTransaction();
int[] inserted = con.createQuery(insQuery)
.addParameter("name", "test")
.addParameter("email", "[email protected]")
.addParameter("text", "something exciting")
.addToBatch()
.addParameter("name", "test2")
.addParameter("email", "[email protected]")
.addParameter("text", "something exciting too")
.addToBatch()
.addParameter("name", "test3")
.addParameter("email", "[email protected]")
.addParameter("text", "blablabla")
.addToBatch()
.executeBatch()
.getBatchResult();
con.commit();
assertEquals(3, inserted.length);
for (int i : inserted) {
assertEquals(1, i);
}
deleteUserTable();
}
Execute 5000 SELECT statements against a DB and map the data returned to a POJO. Code is available here.
Method | Duration |
---|---|
Hand coded ResultSet | 49ms |
TODAY JDBC | 59ms (20.41% slower) |
Sql2o | 65ms (32.65% slower) |
Apache DbUtils | 107ms (118.37% slower) |
MyBatis | 245ms (400.00% slower) |
JDBI | 273ms (457.14% slower) |
Hibernate | 280ms (471.43% slower) |
Spring JdbcTemplate | 342ms (597.96% slower) |
jOOQ | 374ms (663.27% slower) |
本项目的诞生离不开以下开源项目: