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.