我在调用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存储过程。
有人能提供一个简单的例子来调用Oracle存储过程,使用mybatis来处理多个输入输出参数吗?
发布于 2014-04-13 10:52:20
杰夫·巴特勒在用户组中说
对于存储过程参数,MyBatis将将输入和输出参数映射到parameterType中的属性。
您可以尝试发送一个具有userId、userPwd和userType的Map、POJO或三个带注释的变量。在调用SP之后,MyBatis将将OUT参数设置为userType。
我现在不能尝试,稍后我会尝试编辑答案。但你能试试这些吗
1)按以下方式定义函数,并检查在调用SP之后是否更新了userType。
void getUserType(Param("userId") String userId, Param("userPwd") String userPwd, Param("userType") String userType);或
2)创建一个映射,添加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);https://stackoverflow.com/questions/23031722
复制相似问题