2016-08-02 59 views
0

Ich bin unter machen eine gespeicherte Prozedur in Oralce 11g und ich sollte dies von Mybatis Mapper aufrufen. Die Prozedur nimmt drei Parameter und der dritte ist für OUT-Parameter. Ich habe wie folgt codiert, aber der Parameter OUT wurde in Java als 0 zurückgegeben.mybatis aufrufbare Anweisung out Parameter Integer

Mybatis Mapper:

<mapper namespace="..."> 
<select id="setUserRole" statementType="CALLABLE" parameterType="hashmap"> 
    { call set_user_role(#{email}, #{roleName}, #{cntPrivs, mode=OUT, jdbcType=NUMERIC})} 
</select> 
</mapper> 

Mybatis Mapper-Schnittstelle:

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

Dienstschicht verwendet Mybatis Mapper:

@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; 
} 

in Oracle-Code:

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; 
/

Ich überprüft OUT Parameter der Prozedur gibt mehr als 0 im Datenbankbereich zurück. In Java sollte die Variable "privilegeCount" nach dem Aufruf der Methode userMapper.setUserRole() größer als 0 sein. aber gibt 0. zurück

Wenn ich "privilegeCount" als 10 initialisierte, blieb es 10 nach dem Aufrufen von userMapper.setUserRole().

Es scheint wie "privilegeCount" wird nicht mit mybatis synchronisiert.

Wie gehe ich damit um?

Vielen Dank im Voraus.

Antwort

0

Problem gelöst.

nach Mybatis Mapper-Methode aufrufen, könnte ich OUT Parameter erhalten von:

(Integer)map.get("cntPrivs") 

ich das Protokoll überprüft.

INFO: jdbc.audit - 4. CallableStatement.getInt (3) zurück 1

den dritten Parameter OUT normalerweise zurückgegeben wurde. (die angegebene Rolle hat nur eine Berechtigung)