today-jdbc

😜 TODAY Jdbc

GPL-3.0 License

Stars
5

TODAY JDBC

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();
  }
  

Performance of SELECT

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.

📄 开源协议

请查看 GNU GENERAL PUBLIC LICENSE

Badges
Extracted from project README
GPLv3 Author Codacy Badge GitHub CI
Related Projects