使用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 即可