使用mysql数据库

 

 

创建存储过程语句示例

test为数据库名称,item_conform 为存储过程名称,5个入参,一个出参, IN为入参,OUT为出参,

begin和end之间为存储过程的业务逻辑,sql语句,这里做简化处理

DROP PROCEDURE
IF
    EXISTS test.item_confirm;


CREATE PROCEDURE
test.item_confirm
( IN p_pid VARCHAR(30), IN p_adviceid VARCHAR(30), IN p_item_id VARCHAR(30), IN p_empid VARCHAR(30), IN p_type VARCHAR(30), OUT p_ok int ) 
BEGIN 

set p_ok = 1;
END

但是以上语句执行失败;

 

解决:把begin和end去掉就好了

 

调用存储过程

call test.item_confirm

("1","2","3","4","5",@p_ok);
select @p_ok;

 

 

java代码,使用spring data jpa

 

1)建立对象实体,需要设置主键id,存储过程参数5个入参1个出参

@Entity @NamedStoredProcedureQuery(
        name="HisProcedureEntity.hisconfirm",    【自由定义,数据库并不要求有相应的表结构对应】
        procedureName = "test.item_confirm",   【存储过程名称】
        parameters= {
              
                @StoredProcedureParameter(mode= ParameterMode.IN, type=String.class, name="p_pid"),
             
                @StoredProcedureParameter(mode= ParameterMode.IN, type=String.class, name="p_adviceid"),
             
                @StoredProcedureParameter(mode= ParameterMode.IN, type=String.class, name="p_item_id"),
           
                @StoredProcedureParameter(mode= ParameterMode.IN, type=String.class, name="p_empid"),
             
                @StoredProcedureParameter(mode= ParameterMode.IN, type=String.class, name="p_type"),
               
                @StoredProcedureParameter(mode=ParameterMode.OUT, type=Integer.class, name="p_ok")
                    }
)
public class HisProcedureEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;


}

 

2)建立dao层接口,即repository

public interface HisProcedure extends JpaRepository<HisProcedureEntity, Long> {

    /**
     * 储存过程
     *
     * @param pPid
     * @param pAdviceid
     * @param pItemId
     * @param pEmpid
     * @param pType
     * @return
     */
    @Transactional    【必加,不然报错(连接关闭)】
    @Procedure(name = "HisProcedureEntity.hisconfirm")
    Integer proItemConfirm2(@Param("p_pid") String pPid,
                           @Param("p_adviceid") String pAdviceid,
                           @Param("p_item_id") String pItemId,
                           @Param("p_empid") String pEmpid,
                           @Param("p_type") String pType);

}

 

3)业务方法调用

调用dao层接口方法 proItemConfirm2 即可