我想在调用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,有什么想法吗?
答案 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();