繁体   English   中英

mybatis返回原始类型的过程调用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM