2016-08-02 18 views
0

私はOralce 11gで1つのストアドプロシージャを作成中です。これはmybatis mapperから呼び出す必要があります。このプロシージャには3つのパラメータがあり、3つ目はOUTパラメータです。私は以下のようにコード化しましたが、OUTパラメータはJavaで0として返されました。mybatis callable statement outパラメータの整数

MyBatisのマッパー:

​​

MyBatisのマッパーインターフェース:MyBatisのマッパーを利用

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

サービス層: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

問題を解決しました。私は、ログをチェックし

(Integer)map.get("cntPrivs") 

MyBatisのマッパーメソッドを呼び出した後、私はしてパラメータをOUT得ることができます。

INFO:jdbc.audit - 4. CallableStatement.getInt(3)第3のOUTパラメータが正常に戻された1

を返さ。 (与えられた役割には1つの許可があります)

関連する問題