spring data Jpa 调用存储过程返回多个out参数

spring data Jpa 调用存储过程返回多个out参数

标注Entity

@Entity
@Table(name="SY_USER")
@NamedStoredProcedureQueries({
    @NamedStoredProcedureQuery(name="pd_ka_strreportscanx",procedureName="PD_KA_STRREPORTSCANX"
        ,parameters={@StoredProcedureParameter(mode=ParameterMode.IN,name="i_send_no",type=String.class)
    ,@StoredProcedureParameter(mode=ParameterMode.IN,name="i_send_qty",type=String.class),
        @StoredProcedureParameter(mode=ParameterMode.OUT,name="o_str_auto",type=String.class),
        @StoredProcedureParameter(mode=ParameterMode.OUT,name="o_test_auto",type=String.class),
        @StoredProcedureParameter(mode=ParameterMode.OUT,name="o_return",type=String.class)
    })
})
public class Users{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="USER_NO")
    private String userNo;//主键
    @Column(name="USER_ID")
    private String userId;//用户id
    @Column(name="PASSWORD")
    private String password;//用户密码
    @Column(name="USER_DESC")
    private String userDesc;//用户名称
    @Column(name="FACTORY")
    private String factory;//用户厂别
    @Column(name="INV_FLAG")
    private String invFlag;//是否停用


    public String getUserDesc() {
        return userDesc;
    }
    public void setUserDesc(String userDesc) {
        this.userDesc = userDesc;
    }
    public String getFactory() {
        return factory;
    }
    public void setFactory(String factory) {
        this.factory = factory;
    }
    public String getInvFlag() {
        return invFlag;
    }
    public void setInvFlag(String invFlag) {
        this.invFlag = invFlag;
    }
    public String getUserNo() {
        return userNo;
    }
    public void setUserNo(String userNo) {
        this.userNo = userNo;
    }
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }


}

随便找一个entity就可以了如果有多个存储过程,可以用@NamedStoredProcedureQueries就像我上面一样.如果只有1个存储过程,可以用@NamedStoredProcedureQuery代替@NamedStoredProcedureQueries.

@StoredProcedureParameter 是用来标注存储过程的参数的..没啥特别的.只是要注意name和数据库里的参数名字一样.

@NamedStoredProcedureQuery里面procedureName 也要与数据库中存储过程的名字一样.而name可以自己取值,与数据库没有关系

调用存储过程

public String saveQuarantine(HttpServletRequest request,String send_no,String send_qty) throws Exception{

    String o_return=null;
    String o_str_auto=null;
    String o_test_auto=null;
    try {
    /*  o_return=usersService.saveQuarantine(send_no, send_qty);*/
        //调用存储过程pd_ka_strreportscanx(此名称并不是数据库中名称由Users类中定义的)
         StoredProcedureQuery store = this.entityManager.createNamedStoredProcedureQuery("pd_ka_strreportscanx");
          store.setParameter("i_send_no", send_no);  
          store.setParameter("i_send_qty", send_qty);  
          store.execute();
           o_str_auto=(String) store.getOutputParameterValue("o_str_auto");
           o_test_auto=(String) store.getOutputParameterValue("o_test_auto");
          o_return=(String) store.getOutputParameterValue("o_return");
          System.out.println(""+o_return);
    } catch (Exception e) {
        request.setAttribute(LoggerUtils.LOGGER_RETURN,"保存"+send_no+"待檢材料收貨失败!");
    }

    if(o_return!=null){
        request.setAttribute(LoggerUtils.LOGGER_RETURN,"待檢材料收貨保存成功,正式單號:"+o_str_auto+"測試單號:"+o_test_auto);
        o_return="待檢材料收貨保存成功,正式單號:"+o_str_auto+"測試單號:"+o_test_auto;
    }
        return o_return;
    }

}

通过getOutputParameterValue就可以获取你需要的output参数了。

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页