JPA調用存儲過程[轉]

要調用存儲過程,我們可以通過EntityManager對象的createNativeQuery()方法執行SQL 語句(注意:這裏說的是SQL語句,不是HPQL), 調用存儲過程的SQL格式如下:
{call 存儲過程名稱(參數1, 參數2, … )}
EJB3 中你可以調用的存儲過程有兩種
1無返回值的存儲過程。
2返回值爲ResultSetselect 形式返回的值)的存儲過程(注意:EJB3不能調用以OUT參數返回值的存儲過程。)
下面我們看看幾種具有代表性的存儲過程的調用方法.
調用無返回值的存儲過程
首先創建一個名爲AddPerson的存儲過程,他的DDL 如下(注:本例使用的是MySql數據庫):
CREATE PROCEDURE `AddPerson`()
NOT DETERMINISTIC
SQL SECURITY DEFINER
COMMENT ''
BEGIN
INSERT into person(`PersonName`,`sex`,`age`) values('存儲過程',1,25);
END;
下面的代碼片斷展示了無返回值存儲過程的調用方法:
//調用無返回參數的存儲過程
Query query = em.createNativeQuery("{call AddPerson()}");
query.executeUpdate();
調用返回單值的存儲過程
先創建一個名爲GetPersonName的存儲過程,他有一個INTEGER類型的輸入參數,存儲過程的DDL如下(注:本例使用的是MySql數據庫):
CREATE PROCEDURE `GetPersonName`(IN Pid INTEGER(11))
NOT DETERMINISTIC
SQL SECURITY DEFINER
COMMENT ''
BEGIN
select personname from person where `personid`=Pid;
END;
下面的代碼片斷展示了返回單值的存儲過程的調用方法:
//調用返回單個值的存儲過程
Query query = em.createNativeQuery("{call GetPersonName(?)}");
query.setParameter(1, new Integer(1));
String result = query.getSingleResult().toString();
調用返回表全部列的存儲過程
先創建一個名爲GetPersonList的存儲過程,他的DDL如下(注:本例使用的是MySql數據庫):
CREATE PROCEDURE `GetPersonList`()
NOT DETERMINISTIC
SQL SECURITY DEFINER
COMMENT ''
BEGIN
select * from person;
END;
下面的代碼片斷展示了返回表全部列的存儲過程的調用方法,我們可以EJB3 Persistence運行環境將列值直接填充入一個Entity的實例(本例填充進Person對象),並將實例作爲結果返回.
//調用返回Person 全部列的存儲過程
Query query = em.createNativeQuery("{call GetPersonList()}", Person.class);
List result = query.getResultList();
。。。
while( iterator.hasNext() ){
Person person= (Person)iterator.next();
。。。
}
調用返回部分列的存儲過程
先創建一個名爲GetPersonPartProperties的存儲過程,他的DDL如下(注:本例使用的是MySql數據庫):
CREATE PROCEDURE `GetPersonPartProperties`()
NOT DETERMINISTIC
SQL SECURITY DEFINER
COMMENT ''
BEGIN
SELECT personid, personname from person;
END;
下面的代碼片斷展示了返回部分列的存儲過程的調用方法.
//調用返回部分列的存儲過程
Query query = em.createNativeQuery("{call GetPersonPartProperties()}");
List result = query.getResultList();
。。。。
while( iterator.hasNext() ){
//取每一行
Object[] row = ( Object[]) iterator.next();
//數組中的第一個值是personid
int personid = Integer.parseInt(row[0].toString());
String PersonName = row[1].toString();
。。。。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章