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

时间:2015-09-15 08:57:44

标签: java mybatis

我想在调用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'

我知道我可以将resultType设置为Java Bean,状态为&#39;属性里面,但我只想返回原始类型而不是java bean,有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在字符串中写下你的程序 -

template<typename T>
class MyClass {
    // ...
    static constexpr T minT = std::numeric_limits<T>::has_infinity
                            ? -std::numeric_limits<T>::infinity() 
                            : std::numeric_limits<T>::lowest();
    static constexpr T maxT = std::numeric_limits<T>::has_infinity 
                            ? std::numeric_limits<T>::infinity() 
                            : std::numeric_limits<T>::max();
}

并在您的java代码中执行以下语句,并在mybatis中调用该procuder

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调用它

session.getConnection().prepareCall(String.format(proc)).execute();