私は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と同期されていないようです。
どうすればこの問題に対処できますか?
ありがとうございます。