【发布时间】:2016-12-07 10:08:23
【问题描述】:
我正在 Oralce 11g 中创建一个存储过程,我应该从 mybatis 映射器中调用它。该过程采用三个参数,第三个用于 OUT 参数。我编码如下,但 OUT 参数在 Java 中返回为 0。
mybatis 映射器:
<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 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;
}
在 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 中,调用 userMapper.setUserRole() 方法后,“privilegeCount”变量应该大于 0。但返回 0。
当我将“privilegeCount”初始化为 10 时,在调用 userMapper.setUserRole() 后它保持为 10。
好像“privilegeCount”没有和mybatis同步。
我该如何处理?
提前致谢。
【问题讨论】:
标签: java integer mybatis callable