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: 至此儲存過程的呼叫就完了。