亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從 java 調用 oracle 存儲過程時,在 mybatis 映射器中映射多個參數

從 java 調用 oracle 存儲過程時,在 mybatis 映射器中映射多個參數

米脂 2022-09-07 16:09:55
問題是這樣的,我想從java調用一個存儲過程,使用mybatis / ibatis,這個過程有多個OUT參數,7精確地,其中2個是數字,其他5個Varchars,加上一個IN數字參數上下文中有一個巨大的限制,即沒有模型,只有映射和列表,盡管我們可以在必要時在調用過程時例外。此外,解決方案必須在java中完成,沒有使用xml。我有一個springboot應用程序,有一個休息服務,它調用一個服務bean,它調用Mapper接口,該接口定義了對我正在嘗試執行的過程的調用。到目前為止,我已經嘗試在映射器界面中將結果映射到對象,列表,映射,使用@Result嘗試逐個字段映射到特定的結果類,但一切都失敗了...mybatis似乎執行了該過程而沒有錯誤,但不幸的是沒有返回任何內容。我正在發布我的最新狀態,其中包括嘗試將結果映射到自定義類,它似乎執行該過程,但返回null//custom classpublic class ProcClass {    Integer p_tipo_cliente;    Integer p_codigo_cliente;    String p_nombre_cliente;    String p_cuit_cliente;    String p_cuit_rp;    String p_razon_social_rp;    String p_domicilio;// plus constructor, getters and setters}//Service method public ProcClass callProcedure(String param){        return asociadoMapper.callProcedure(                Integer.getInteger(param),0,0,                "",",","","","");    }//Mapper interface@Repositorypublic interface AsociadoMapper extends Mapper {    @Select(value = AsociadoQueries.getDocumentoAsociadoCall)    @Options(statementType = StatementType.CALLABLE)    @Results(value = {            @org.apache.ibatis.annotations.Result                    (property = "p_tipo_cliente", column = "p_tipo_cliente"),            @org.apache.ibatis.annotations.Result                    (property = "p_codigo_cliente", column = "p_codigo_cliente"),            @org.apache.ibatis.annotations.Result                    (property = "p_nombre_cliente", column = "p_nombre_cliente"),            @org.apache.ibatis.annotations.Result                    (property = "p_cuit_cliente", column = "p_cuit_cliente"),            @org.apache.ibatis.annotations.Result                    (property = "p_cuit_rp", column = "p_cuit_rp"),            @org.apache.ibatis.annotations.Result                    (property = "p_razon_social_rp", column = "p_razon_social_rp"),            @org.apache.ibatis.annotations.Result                    (property = "p_domicilio", column = "p_domicilio"),    })預期的結果很簡單,要么返回列表,映射,要么返回包含過程返回的OUT參數值的自定義類,現在,我得到的只是空或空列表...
查看完整描述

1 回答

?
九州編程

TA貢獻1785條經驗 獲得超4個贊

我剛剛設法弄清楚了,我想我必須自己回答,以防萬一它幫助別人......,事實證明,我最終設法通過只發送1個map作為參數來獲取參數,并在服務方法中設置IN值...此外,映射器現在正在返回 void,這意味著 mybatis 正在動態地將所有額外的 out 參數添加到映射中。我還對調用語句進行了一些更改,也許那里也有錯誤?


代碼的結尾如下:


    //service call

    public Map<String, Object> callProcedure(String param){


            Map<String, Object> map = new HashMap<String, Object>();

            Integer privilegesCount = 0;

            map.put("p_id_grupo_familiar", Integer.valueOf(param));

            asociadoMapper.callProcedure(map);


            return map;

        }

    //mapper

        @Select(value = AsociadoQueries.getDocumentoAsociadoCall)

        @Options(statementType = StatementType.CALLABLE)

        void callProcedure(Map<String,Object> params);


// Call statement


public static final String getDocumentoAsociadoCall = "{ CALL consultas_generales.get_detalle_cliente_gf(" +

            "#{p_id_grupo_familiar,  jdbcType=NUMERIC ,javaType=java.lang.Integer ,mode=IN}," +

            "#{p_tipo_cliente, jdbcType=NUMERIC,javaType=java.lang.Integer ,mode=OUT,},"+

            "#{p_codigo_cliente,  jdbcType=NUMERIC ,javaType=java.lang.Integer ,mode=OUT},"+

            "#{p_nombre_cliente,  jdbcType=VARCHAR ,javaType=java.lang.String ,mode=OUT},"+

            "#{p_cuit_cliente,  jdbcType=VARCHAR ,javaType=java.lang.String ,mode=OUT},"+

            "#{p_cuit_rp,  jdbcType=VARCHAR ,javaType=java.lang.String ,mode=OUT},"+

            "#{p_razon_social_rp,  jdbcType=VARCHAR ,javaType=java.lang.String ,mode=OUT},"+

            "#{p_domicilio, jdbcType=VARCHAR ,javaType=java.lang.String ,mode=OUT}"+

            ")}";


查看完整回答
反對 回復 2022-09-07
  • 1 回答
  • 0 關注
  • 150 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號