首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在调用java中的oracle存储过程时,在mybatis中映射多个出参数

在调用java中的oracle存储过程时,在mybatis中映射多个出参数
EN

Stack Overflow用户
提问于 2019-03-27 18:54:28
回答 1查看 1.7K关注 0票数 2

问题是,我想从java调用一个存储过程,使用mybatis /ib提斯,这个过程有多个出线,7个精确,其中2个是数字,其余5个是Varchars,加上一个IN param。

在上下文中有一个很大的限制,即没有模型、只有映射和列表,但是如果需要的话,我们可以在调用过程时做出例外。而且,解决方案必须在java中完成,不使用xml。

我有一个trying引导应用程序,有一个rest服务,它调用一个服务bean,它调用Mapper接口,它定义了对我试图执行的过程的调用。

到目前为止,我已经尝试在mapper接口中将结果映射为Object、List、Maps,使用@Result逐个字段映射到特定的结果类字段,但是所有的操作都失败了.显然,执行过程没有错误,但遗憾的是没有返回任何内容。

我正在发布我的最新状态,即尝试将结果映射到自定义类,它似乎执行过程,但返回null

代码语言:javascript
复制
//custom class
public 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

@Repository
public 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"),
    })
    ProcClass callProcedure(Integer p_id_grupo_familiar,
                            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
                                     );

//Util class

public class AsociadoQueries {


    public static final String getDocumentoAsociadoCall = "{ CALL consultas_generales.get_detalle_cliente_gf(" +
            "#{p_id_grupo_familiar, mode=IN, jdbcType=INTEGER}," +
            "#{p_tipo_cliente, mode=OUT, jdbcType=INTEGER,},"+
            "#{p_codigo_cliente,  jdbcType=INTEGER},"+
            "#{p_nombre_cliente,  jdbcType=VARCHAR},"+
            "#{p_cuit_cliente,  jdbcType=VARCHAR},"+
            "#{p_cuit_rp,  jdbcType=VARCHAR},"+
            "#{p_razon_social_rp,  jdbcType=VARCHAR},"+
            "#{p_domicilio, jdbcType=VARCHAR}"+
            ")}";


// Pom related dependencies

<!-- MySQL -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.0</version>
        </dependency>


        <!-- https://mvnrepository.com/artifact/org.mybatis.dynamic-sql/mybatis-dynamic-sql -->
        <dependency>
            <groupId>org.mybatis.dynamic-sql</groupId>
            <artifactId>mybatis-dynamic-sql</artifactId>
            <version>1.1.0</version>
        </dependency>

预期的结果很简单,返回一个list、map或一个自定义类,其中包含过程返回的OUT params值,现在,我得到的只有null或一个空列表.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-27 19:43:34

哦,好吧,我只是想办法弄清楚,我想我得自己回答,万一它对别人有帮助.,最后我只发送了一个映射作为参数,然后在服务方法中设置in值.另外,映射器现在正在返回void,这意味着mybatis正在动态地将所有附加的out params添加到地图中。我对call语句也做了一些修改,可能也有错误吗?

代码的结尾如下:

代码语言:javascript
复制
    //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}"+
            ")}";
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55384589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档