欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-24 12:30:01
...

Spring jdbc 提供了jdbcTemplate 对象,该对象定义了 execute 方法可用于执行存储过程。该方法存在许多重载方式,我们使用的是execute(CallableStatementCreator csc, CallableStatementCallback 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。当然这里也可以根据实际需要来返回相应的实例对象。