1. 程式人生 > 其它 >hibernate的資料預設儲存位置_每日一課 | 如何在Hibernate中呼叫儲存過程

hibernate的資料預設儲存位置_每日一課 | 如何在Hibernate中呼叫儲存過程

技術標籤:hibernate的資料預設儲存位置

e22c4124878ebc8d478b8a699ffc7317.gif

在本教程中,您將學習如何在Hibernate中呼叫儲存過程。

MySQL儲存過程

這是一個MySQL儲存過程,該過程接受股票程式碼引數並返回相關的股票資料。

DELIMITER $$CREATEPROCEDURE`GetStocks`(int_stockcode varchar(20))BEGINSELECT* FROMstock wherestock_code = int_stockcode;END$$
DELIMITER ;

在MySQL中,您可以使用call關鍵字簡單地呼叫它:

CALLGetStocks('7277');

休眠呼叫儲存過程

在Hibernate中,有三種方法可以呼叫資料庫儲存過程。

1.本機SQL – createSQLQuery

您可以使用createSQLQuery()直接呼叫儲存過程。

Query query = session.createSQLQuery("CALL GetStocks(:stockCode)")
.addEntity(Stock.class)
.setParameter("stockCode", "7277");
List result = query.list();for(inti=0; iStock stock = (Stock)result.get(i);

System.out.println(stock.getStockCode());
}

2.註解中的NamedNativeQuery

在@NamedNativeQueries批註中宣告儲存過程。

//Stock.java
[email protected]({@NamedNativeQuery(
name = "callStockStoreProcedure",
query = "CALL GetStocks(:stockCode)",
resultClass = Stock.class
)
})@[email protected](name = "stock")publicclassStockimplementsjava.io.Serializable{

...

用getNamedQuery()呼叫它。

Query query = session.getNamedQuery("callStockStoreProcedure")
.setParameter("stockCode", "7277");
List result = query.list();for(inti=0; iStock stock = (Stock)result.get(i);
System.out.println(stock.getStockCode());
}

3. XML對映檔案中的sql-query

在“sql-query”標籤中宣告您的儲存過程。


...<hibernate-mapping><classname="com.mkyong.common.Stock"table="stock"...><idname="stockId"type="java.lang.Integer"><columnname="STOCK_ID"/><generatorclass="identity"/>id><propertyname="stockCode"type="string"><columnname="STOCK_CODE"length="10"not-null="true"unique="true"/>property>
...class> <sql-queryname="callStockStoreProcedure"><returnalias="stock"class="com.mkyong.common.Stock"/>sql-query>hibernate-mapping>

用getNamedQuery()呼叫它。

Query query = session.getNamedQuery("callStockStoreProcedure")
.setParameter("stockCode", "7277");
List result = query.list();for(inti=0; iStock stock = (Stock)result.get(i);
System.out.println(stock.getStockCode());
}

結論

上面的三種方法做同樣的事情,在資料庫中呼叫儲存過程。三種方法之間沒有太大區別,您選擇哪種方法取決於您的個人喜好。

翻譯自:https://mkyong.com/hibernate/how-to-call-store-procedure-in-hibernate/

推薦閱讀--

當一個程式設計師飛速敲鍵盤時,他在幹嘛?

臥槽!最新程式語言排名,Java 淪為老二。。

為何程式設計師上班時間總戴個耳機,看完恍然大悟...

每日一課 | 如何將Java物件讀取和寫入檔案

每日一課 | Java Final關鍵字示例

9ab441e7-3e59-eb11-8da9-e4434bdf6706.svg

球分享

9bb441e7-3e59-eb11-8da9-e4434bdf6706.svg

球點贊

411766ced22a73130a5b389c65499015.gif

球在看