Skip to main content

模版方法

dbVisitor 支持以下几种方式使用模版方法:

获取 Connection

使用 ConnectionCallback 接口参数的核心模版方法可以获取原始的 java.sql.ConnectionJdbcTemplate 会处理获取连接、释放连接、捕获异常。上层代码只需要专注于使用 Connection 即可。

T resultList = jdbcTemplate.execute((ConnectionCallback<T>) con -> {
return ...;
});

获取 Statement

使用 StatementCallback 接口参数的核心模版方法可以获取原始的 java.sql.StatementJdbcTemplate 会处理获取连接、创建 Statement、关闭 Statement、释放连接、捕获异常。上层代码只需要专注于使用 Statement 即可。

T resultList = jdbcTemplate.execute((StatementCallback<T>) stmt -> {
return ...;
});

SQL 参数化

模版方法允许自定义 PreparedStatement 的创建过程。

  • 使用 PreparedStatement 设置参数,使用 ResultSetExtractor 接收结果。
    T result = jdbc.executeCreator(con -> {
    PreparedStatement ps = con.prepareStatement("select * from users where id > ?");
    ps.setString(1, "Bob");
    return ps;
    }, (ResultSetExtractor) rs -> {
    return ...;
    });
  • 使用 PreparedStatement 设置参数,使用 RowMapper 接收结果。
    List<User> result = jdbc.executeCreator(con -> {
    PreparedStatement ps = con.prepareStatement("select * from users where id > ?");
    ps.setString(1, "Bob");
    return ps;
    }, (RowMapper<User>) (rs, rowNum) -> {
    return ...;
    });
  • 使用 PreparedStatement 设置参数,使用 RowCallbackHandler 处理结果。
    jdbc.executeCreator(con -> {
    PreparedStatement ps = con.prepareStatement("select * from users where id > ?");
    ps.setString(1, "Bob");
    return ps;
    }, (RowCallbackHandler) (rs, rowNum) -> {
    return ...;
    });

调用存储过程

List<Object> objectMap = new JdbcTemplate(conn).call("{call proc_select_table(?,?)}", cs -> {
cs.setString(1, "dative");
cs.registerOutParameter(2, Types.VARCHAR);
}, cs -> {
// 使用 MultipleResultSetExtractor 接收所有结果
List<Object> objects = new MultipleResultSetExtractor().doInCallableStatement(cs);
// 获取输出参数
objects.add(cs.getString(2));
return objects;
});