說說如何使用 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。當然這裏也可以根據實際需要來返回相應的實例對象。

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