java - mybatis 为过程调用返回原始类型

标签 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 设置为内部带有“status”属性的 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 中调用该 producer 的 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>

关于java - mybatis 为过程调用返回原始类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32581829/

相关文章:

java不正确的时区

java - Android 通过 onSavedInstance 方法中的包传递列表

java - 添加 java 之前检查对象是否在列表中

java - MyBatis with Spring - 配置错误空指针异常

使用 MyBatis 的 SQL 异常

java - java的jar文件

java - 从源文件重建 .jar 库

database - 如何使用 MyBatis Spring Integration 连接多个数据库?

java - 如何让mybatis需要事务?

java - iBatis/MyBatis - 获取结果映射而不是具有自定义键和值的列表