JdbcTemplate中如何进行存储过程调用?代码举例讲解

JdbcTemplate可以通过调用CallableStatement来执行存储过程。主要步骤如下:

  1. 定义存储过程:
CREATE PROCEDURE get_user(IN id INT, OUT name VARCHAR(50))
BEGIN
    SELECT name INTO name FROM user WHERE id = id;
END
  1. 构造调用语句:
CALL get_user(?, ?)
  1. 定义CallableStatementCreator接口实现,用于构造调用语句:
CallableStatementCreator csc = new CallableStatementCreator() {
    public CallableStatement createCallableStatement(Connection conn) throws SQLException {
        return conn.prepareCall("{CALL get_user(?, ?)}");
    }
}; 
  1. 执行存储过程并提取OUT参数:
final String[] name = new String[1];
jdbcTemplate.call(csc, new CallableStatementCallback<Void>() {
    public Void doInCallableStatement(CallableStatement cs) throws SQLException {
        cs.setInt(1, 1);
        cs.registerOutParameter(2, Types.VARCHAR);
        cs.execute();
        name[0] = cs.getString(2);
        return null;
    }
});
System.out.println(name[0]); // John  
  • 传入CallableStatementCreator实现构造调用语句
  • 实现CallableStatementCallback接口,在回调方法中设置IN参数,注册OUT参数,执行调用并提取OUT参数
  • OUT参数通过数组传入,回调后得到输出值

所以,通过JdbcTemplate调用存储过程主要需要完成3个步骤:

  1. 构造存储过程调用语句
  2. 实现CallableStatementCreator构造CallableStatement
  3. 实现CallableStatementCallback设置参数、执行调用和获取输出

JdbcTemplate通过这种方式,简化了存储过程的调用,隐藏了JDBC底层细节,提供了更易用的接口。