2016-08-02 27 views
0

我正在製作一個存儲在Oralce 11g中的程序,我應該從mybatis映射器調用它。該過程需要三個參數,第三個參數用於OUT參數。我編碼如下,但OUT參數在Java中返回爲0。mybatis可調用語句輸出參數整數

MyBatis的映射器:

​​

MyBatis的映射器接口:

public interface UserMapper { 
    void setUserRole(Map<String, Object> map); 
} 

服務層利用MyBatis的映射器:

Oracle中代碼
@Override 
public boolean setBasicRole(String email) { 
    Map<String, Object> map = new HashMap<String, Object>(); 
    Integer privilegesCount = 0; 
    map.put("roleName", UserServiceImpl.ROLE_BASIC); 
    map.put("email", (Object)email); 
    map.put("cntPrivs", privilegesCount); 
    userMapper.setUserRole(map); 

    System.out.println("cntPrivs : " + privilegesCount); // printed zero 

    return (privilegesCount > 0)? true : false; 
} 

set serveroutput on 
declare 
    cnt_privs number := 0; 
begin 
    set_user_role('<set my email>', 'NORMAL', cnt_privs); 
    dbms_output.put_line(cnt_privs); // printed more than 0 
end; 
/

我檢查了OUT參數的過程在數據庫區域返回0以上。 在Java中,調用userMapper.setUserRole()方法後,「privilegeCount」變量應該大於0。但返回0.

當我將「privilegeCount」初始化爲10時,它在調用userMapper.setUserRole()後保持爲10。

看起來好像「privilegeCount」沒有與mybatis同步。

我該如何處理?

在此先感謝。

回答

0

問題已解決。

調用MyBatis的映射器的方法後,我能拿出來的參數:

(Integer)map.get("cntPrivs") 

我查了日誌。

INFO:jdbc.audit - 4. CallableStatement.getInt(3)返回的1

第三OUT參數被正常返回。 (給定角色只有一個權限)