mybatis callable语句输出参数整数

时间:2016-08-02 07:11:19

标签: java integer mybatis callable

我正在使用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同步。

我该如何处理?

提前致谢。

1 个答案:

答案 0 :(得分:0)

问题解决了。

调用mybatis mapper方法后,我可以通过以下方式得到OUT参数:

(Integer)map.get("cntPrivs")

我检查了日志。

  

INFO:jdbc.audit - 4. CallableStatement.getInt(3)返回1

正常返回第三个OUT参数。 (给定的角色只有一个权限)