首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mybatis存储过程

问Mybatis存储过程
EN

Stack Overflow用户
提问于 2014-04-12 14:32:42
回答 1查看 2.6K关注 0票数 0

我在调用oracle存储过程和从Oracle存储过程获取输出参数时遇到了问题。这是我的地图AppUserMapper.java

代码语言:javascript
复制
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);

这是存储过程代码

代码语言:javascript
复制
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 ;
/

它正在执行存储过程,但出现错误。

代码语言:javascript
复制
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存储过程。

有人能提供一个简单的例子来调用Oracle存储过程,使用mybatis来处理多个输入输出参数吗?

EN

回答 1

Stack Overflow用户

发布于 2014-04-13 10:52:20

杰夫·巴特勒在用户组中说

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

您可以尝试发送一个具有userId、userPwd和userType的Map、POJO或三个带注释的变量。在调用SP之后,MyBatis将将OUT参数设置为userType。

我现在不能尝试,稍后我会尝试编辑答案。但你能试试这些吗

1)按以下方式定义函数,并检查在调用SP之后是否更新了userType。

代码语言:javascript
复制
void getUserType(Param("userId") String userId, Param("userPwd") String userPwd, Param("userType") String userType);

或

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

代码语言:javascript
复制
void getUserType(Map<String, Object> myMap);

或

3)创建一个包含3个变量(userId、userPwd、userType)、getter、setter的类。设置userId和userPwd值。呼叫SP。然后是userObj.getUserType()。

代码语言:javascript
复制
void getUserType(UserClass userObj);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23031722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档