我们通过 @Procedure 来介绍一下,JPA 对储存过程的支持。
(1)@Procedure 源码如下:
public @interface Procedure {
// 数据库里面储存过程的名称
String value() default "";
// 数据库里面储存过程的名称
String procedureName() default "";
//在EntityManager中的名字,NamedStoredProcedureQuery使用
String name() default "";
//输出参数的名字
String outputParameterName() default "";
}
(2)首先创建一个储存过程名字叫 plus1inout 有两个参数、两个结果。
CREATE PROCEDURE plus1inout(IN arg int, OUT res int)
BEGIN
SELECT (arg+10) into res;
END
(3)我们可以使用 @NamedStoredProcedureQueries 注释来调用存储过程,这个必须定义在一个实体上面。
@Entity
@NamedStoredProcedureQuery(name = "User.plus1", procedureName = "plus1inout", parameters = {
@StoredProcedureParameter(mode = ParameterMode.IN, name = "arg", type = Integer.class),
@Store