spring data jpa 如何调用mysql存储过程?

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<ChildThingTree, String>,JpaRepository<ChildThingTree, String> {

        @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: 至此存储过程的调用就完了。

猜你喜欢

转载自blog.csdn.net/huxiaochao_6053/article/details/80900106