我正在使用Oralce 11g制作一个存储过程,我应该从mybatis mapper中调用它。该过程需要三个参数,第三个参数用于OUT参数。我编码如下,但是在Java中,OUT参数返回为0。
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界面:
public interface UserMapper {
void setUserRole(Map<String, Object> map);
}
利用mybatis映射器的服务层:
@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;
}
Oracle代码中的:
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中,&#34; privilegeCount&#34;调用userMapper.setUserRole()方法后,变量应大于0。但返回0。
当我初始化&#34; privilegeCount&#34; 10,调用userMapper.setUserRole()后它保持10。
好像&#34; privilegeCount&#34;不会与mybatis同步。
我该如何处理?
提前致谢。
答案 0 :(得分:0)
问题解决了。
调用mybatis mapper方法后,我可以通过以下方式得到OUT参数:
(Integer)map.get("cntPrivs")
我检查了日志。
INFO:jdbc.audit - 4. CallableStatement.getInt(3)返回1
正常返回第三个OUT参数。 (给定的角色只有一个权限)