Mybatis Oracle存储过程

时间:2014-04-12 14:32:42

标签: oracle output mybatis procedure

我在调用oracle存储过程并从Oracle存储过程中获取输出参数时遇到问题。 这是我的映射器 AppUserMapper.java

public interface AppUserMapper {
    @Select(value= "{ CALL sp_check_user(    #{userId, mode=IN, jdbcType=VARCHAR },  #{userPwd, mode=IN, jdbcType=VARCHAR},  #{userType, jdbcType=VARCHAR, mode=OUT} )}")
    @Options(statementType = StatementType.CALLABLE)
    Object getUserType(String userId,String UserPwd);
}

Dao call
    Map<String, Object> retrurnStatus = (Map<String, Object>) appUserMapper.getUserType(userId,UserPwd);

这是存储过程代码

CREATE OR REPLACE PROCEDURE HR.sp_check_user (userId VARCHAR,userPwd VARCHAR, userType OUT VARCHAR )
AS 
BEGIN
  BEGIN

  select user_type into userType from appuser where USER_ID = userId and USER_PWD = userPwd ;
  EXCEPTION 
    WHEN NO_DATA_FOUND THEN 
      userType := 'Invalid';      
  END ;
END ;
/

正在执行存储过程但是给出了错误

DEBUG 2014-04-12 09:51:56,948 org.apache.ibatis.logging.commons.JakartaCommonsLoggingImpl: ==>  Preparing: { CALL sp_check_user( ?, ?, ? ) } 
DEBUG 2014-04-12 09:51:57,103 org.apache.ibatis.logging.commons.JakartaCommonsLoggingImpl: ==> Parameters: abc(String), abc1(String)

Could not complete request
    java.lang.NullPointerException
        at com.appuser.dao.AppUserDaoImpl.getUserType(AppUserDaoImpl.java:33)

我一直在尝试多种选择,但找不到我可以采取的样本并尝试。

我将在此处传递适当的帮助,因为我一直在尝试在mybatis中使用具有多个输入和输出参数的oracle存储过程。

有人可以提供简单的示例,使用mybatis为多个输入输出参数调用Oracle存储过程吗?

1 个答案:

答案 0 :(得分:0)

杰夫巴特勒在mybatis-user group中说:

  

对于存储过程参数,MyBatis将映射输入和   输出参数到parameterType中的属性。

您可以尝试发送包含userIduserPwduserType的地图,POJO或三个带注释的变量。调用SP后,MyBatis会将OUT参数设置为userType。

我现在无法尝试,我会稍后尝试编辑答案。但你可以尝试这些,

1)按如下方式定义您的功能,并在调用SP后检查userType是否更新。

void getUserType(Param("userId") String userId, Param("userPwd") String userPwd, Param("userType") String userType);

2)创建一个Map,添加3个键值对,即(“userId”,1234),(“userPwd”,666),(“userType,null)元组。在调用SP后,你可以尝试获取userType值。

void getUserType(Map<String, Object> myMap);

3)创建一个包含3个变量(userId,userPwd,userType),getter,setter的类。设置userId和userPwd值。打电话给SP。然后,userObj.getUserType()。

void getUserType(UserClass userObj);
相关问题