A:首先定义存储过程依赖的jpa表:
@Entity
@Table(name="evenmngt_childthingtree_tmp")//数据库中的表名
@NamedStoredProcedureQuery(name = "getChildTree1", procedureName = "eventmngt.getChildTree1",
parameters = {@StoredProcedureParameter(mode= ParameterMode.IN,name = "thingnums", type = String.class)}
)
//此处的@NamedStoredProcedureQuery就是要和数据库里面的存储过程要对应,
//java实体类 数据库
//getChildTree1(java实体类的存储过程名称) eventmngt.getChildTree1(数据库名.存储过程名称)
//@StoredProcedureParameter 存储过程参数类型注解(mode 参数模式[三种 in out in+out],name 参数名称:要和数据库存储过程定义的参数名称相同
//type参数类型:参数类型的class对象)
public class ChildThingTree implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
@Column(name="parentthingnum")
private String parentThingNum;//父事情编号
@Column(name="thingnum")
private String thingNum;//事情编号
@Column(name="lev")
private int lev;//级别;
@Column(name="count")
private int count;//
...此处省略
get 或set 方法;
...重写toString()方法此处省略
toString()方法
}
B定义持久层接口方法 调用存储过程
@Repository
@Transactional
public interface ChildThingTreeDao extends CrudRepository,JpaRepository {
@Procedure(name = "getChildTree1")//此处的name 要和实体类里@NamedStoredProcedureQuery注解的name属性值要一样,否则会报错。
public void getChildTree1(@Param("thingnums") String thingnums);
//(@Param注解里的名字要和@StoredProcedureParameter里的name属性值一样
}
C:在service层直接调用存储过程
@Autowired
private ChildThingTreeDao childThingTreeDao;
childThingTreeDao.getChildTree1(param);
D: 至此存储过程的调用就完了。