【问题标题】:mybatis callable statement out parameter integermybatis 可调用语句输出参数整数
【发布时间】: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


    【解决方案1】:

    问题解决了。

    调用mybatis mapper方法后,可以通过以下方式获取OUT参数:

    (Integer)map.get("cntPrivs")
    

    我检查了日志。

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

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

    【讨论】:

      猜你喜欢
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-27
      • 1970-01-01
      • 2017-08-16
      • 2023-03-26
      相关资源
      最近更新 更多