[英]MyBatis: Attempted to return null from a method with a primitive return type
[英]mybatis return primitive type for procedure call
我想在调用oracle过程后返回原始类型,这是我的mybatis接口:
public interface ProcedureMapper {
int getProcedureResult();
}
我想执行一个过程或函数然后返回状态,我尝试了以下配置:
<select id="getProcedureResult" statementType="CALLABLE" resultType="int">
BEGIN
EXECUTE IMMEDIATE 'CREATE TABLE temp_tt (id NUMBER(12) )';
#{status,mode=OUT,jdbcType=INTEGER} := 0;
EXCEPTION
WHEN OTHERS THEN
#{status,mode=OUT,jdbcType=INTEGER} := -1;
END;
</select>
不起作用,将引发异常:
Caused by: org.apache.ibatis.reflection.ReflectionException: Could not set property 'status' of 'class java.lang.Class' with value 'null' Cause: org.apache.ibatis.reflection.ReflectionException: There is no setter for property named 'status' in 'class java.lang.Class'
我知道我可以在里面使用'status'属性将resultType设置为Java Bean,但是我只想返回原始类型而不是Java Bean,有什么想法吗?
像这样在字符串中编写过程-
public String proc = "BEGIN\n"
+"\tEXECUTE IMMEDIATE 'CREATE TABLE temp_tt (id NUMBER(12) )';\n"
+"\tstatus := 0;\n"
+"\tEXCEPTION\n"
+"\t\tWHEN OTHERS THEN\n"
+"\tstatus := 0;\n"
+"\tEND;\n"
并在您在mybatis中调用该处理器的Java代码中执行以下语句
session.getConnection().prepareCall(String.format(proc)).execute();
另一个解决方案是:
另一个解决方案是在数据库中创建您的过程并将其保存。 并从mybatis调用它
<update id="getProcedureResult" statementType="CALLABLE">
{call some_procedure(
#{status, javaType=java.lang.Integer, jdbcType=INTEGER, mode=OUT})
}
</update>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.