说说如何使用 Spring jdbc 来执行存储过程

Spring jdbc 提供了jdbcTemplate 对象,该对象定义了 execute 方法可用于执行存储过程。该方法存在许多重载方式,我们使用的是execute(CallableStatementCreator csc, CallableStatementCallback<T> action)。
CallableStatementCreator 对象用于定义调用存储过程的入参与出参。CallableStatementCallback 对象用于定义执行以及接受存储过程的返回值。这两个对象都采用lambda表达式来实现,因为这样比匿名函数更简洁。
以下是以通用的方式来执行存储过程:

jdbcTemplate.execute(con -> {
                    String proc = sql;
                    CallableStatement cs = con.prepareCall(proc);
                    log.debug("开始注册入、出参 ->>");
                    //注册入参
                    int currentIndex = 1;
                    for (int i = 1; i <= inParamValues.size(); i++) {
                        cs.setObject(i, inParamValues.get(i - 1));
                        currentIndex++;
                    }
                    //注册出参
                    for (int i = currentIndex; i < outParamNames.size() + currentIndex; i++) {
                        cs.registerOutParameter(i, Types.JAVA_OBJECT);
                    }
                    log.debug("注册入、出参成功 <<-");
                    return cs;
                }, (CallableStatementCallback<Object>) cs -> {
                    cs.execute();
                    return null;
                });

注册入参时,利用CallableStatement 对象的setObject() 方法来传递入参,这样我们就无须把入参转换为相应的类型。
注册出参时,把Types.JAVA_OBJECT传入 CallableStatementCallback对象的registerOutParameter() 方法,这也是为了统一处理。
在 CallableStatementCallback对象中,直接返回 null。当然这里也可以根据实际需要来返回相应的实例对象。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章