模版方法
dbVisitor 支持以下几种方式使用模版方法:
获取 Connection
使用 ConnectionCallback
接口参数的核心模版方法可以获取原始的 java.sql.Connection
。
JdbcTemplate 会处理获取连接、释放连接、捕获异常。上层代码只需要专注于使用 Connection 即可。
T resultList = jdbcTemplate.execute((ConnectionCallback<T>) con -> {
return ...;
});
获取 Statement
使用 StatementCallback
接口参数的核心模版方法可以获取原始的 java.sql.Statement
。
JdbcTemplate 会处理获取连接、创建 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;
});