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