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", "test@test.com")
.addParameter("text", "something exciting")
.addToBatch()
.addParameter("name", "test2")
.addParameter("email", "test2@test.com")
.addParameter("text", "something exciting too")
.addToBatch()
.addParameter("name", "test3")
.addParameter("email", "test3@test.com")
.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) |
本项目的诞生离不开以下开源项目:
- TODAY Context: A Java library for dependency injection and aspect oriented programing
- Sql2o: sql2o is a small library, which makes it easy to convert the result of your sql-statements into objects. No resultset hacking required. Kind of like an orm, but without the sql-generation capabilities. Supports named parameters.