簡體   English   中英

如何使用 MyBatis 調用返回 BOOLEAN 的 function?

[英]How can i call a function that return a BOOLEAN using MyBatis?

我正在使用 MyBatis 在 PL SQL 數據庫中調用 function。 function 的 OUT 參數之一為 BOOLEAN,如下所示:

FUNCTION f_foo_function(foo IN VARCHAR, foo_output OUT BOOLEAN, error OUT VARCHAR2)

My problem is when i try to call the function from my xml mapper, every try i do mybatis don't recognize the boolean output and throw me and error like incompatible types. 此外,當我嘗試從 PLSQL Developer 測試 function 時,它會進行如下轉換:pout_boolean_result:= sys.diutil.bool_to_int(pout_boolean_result); 把 boolean 還給我。

可以忽略 integer 並指定 MyBatis 將輸出視為 boolean? 我怎樣才能做到這一點?

我的 xml 是這樣的:

<select id="getFooFunction" statementType="CALLABLE">
        {#{result, mode=OUT, jdbcType=INTEGER} = call f_foo_function
        (
            #{foo, mode=IN, jdbcType=VARCHAR},
            #{foo_output, mode=OUT, jdbcType=DOUBLE},
            #{error, mode=OUT, jdbcType=VARCHAR}
        )
        }
</select>

為了測試它,我定義了 function 如下。

create or replace function f_foo_function(
  foo in varchar, 
  foo_output out integer, 
  error out varchar2
) return integer is
begin
    foo_output := 1;
    error := 'No error';
  return 99;
end;

foo_output被定義為INTEGER因為BOOLEAN正如 APC 指出的那樣無效。

映射器方法定義為...

void getFooFunction(FooFuncParam param);

參數是一個 POJO。

public class FooFuncParam {
  private Integer result;
  private String foo;
  private boolean fooOutput;
  private String error;
  // getters/setters
}

這是映射器聲明。

<update id="getFooFunction" statementType="CALLABLE">
  {#{result,jdbcType=INTEGER,mode=OUT} = call f_foo_function(
    #{foo,mode=IN},
    #{fooOutput,jdbcType=INTEGER,javaType=_boolean,mode=OUT}, 
    #{error,jdbcType=VARCHAR,mode=OUT})}
</update>

請注意,指定javaType以將INTEGER轉換為boolean
如果 function 將0設置為foo_output ,則將false設置為FooFuncParam.fooOutput 非零值意味着true 如有必要,您可以編寫自定義類型處理程序來更改行為。

這是一個使用 Oracle 18c 和 ojdbc 19.3.0.0 測試的可執行演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM