用hibernate呼叫儲存過程
儲存過程是將一組需要重複執行的操作封裝在一起存放在伺服器中,支援使用者提供的變數,具有強大的程式設計功能, 可以使用各種sql語句和過程式語句的組合,來封裝資料庫應用中複雜的業務邏輯和處理規則.
使用儲存過程的優點就是:
1.儲存過程是預編譯的可執行程式碼,提高效率
2.將常用的操作集編寫成儲存過程,一次編寫可多次使用,程度可重用
Hibernate中使用儲存過程有很多種方法,
1. 使用hibernate命名查詢
2. 使用JDBC的方法
大概方法如下
a) 獲取hibernatesession
b) 用session獲取Connection
c) 例項化ResultSet
d) CallableStatement call= conn.prepareCall(“{ 儲存過程執行語句}”);
e) 返回資料,關閉資料庫連線,和session連線
- 使用Hibernate中的SQLQuery介面執行
這個方法獲取資料比較簡單,今天就使用這個方法來查詢資料
詳細過程:
a) 建立表,使用DDL語句
程式碼部分:
DROP TABLE IF EXISTS t_user
;
CREATE TABLE t_user
(
user_id
int(11) NOT NULL AUTO_INCREMENT,
user_name
varchar(30) NOT NULL,
user_pwd
varchar(20) DEFAULT NULL,
PRIMARY KEY (user_id
)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
b) 向表內插入資料使用DML語句
程式碼部分
INSERT INTO t_user
VALUES(數值1,數值2,….);
c) 建立儲存過程
程式碼部分:
create PROCEDURE selc_id(IN id varchar(20))
//建立一個名為selc_id的儲存過程,傳入一個引數
BEGIN
set @variable1=CONCAT('%',id,'%');
//建立一個全域性變數,
IF id is null or id='' THEN
select * from t_user;
else
select * from t_user where user_name like @variable1;
END if;
END
d),查詢儲存工程是否建立成功
在mysql客戶端
show procedure status;
如建立成功,Navicat會顯示結果條數
e),建立一個Hibernate專案,把匯入相關jar包,配置hibernate.cfg.xml
程式碼測試部分
private SessionFactory sessionFact=HibernateSessionFactory.getSessionFactory(); private Session session= sessionFact.openSession();
String proc="{call selc_id(1) }";
SQLQuery query = session.createSQLQuery(proc);
//query.setString(0, "admin");
//可以設定引數到語句中
//query.setString(1, "admin");
List list =query.list();
System.out.println(list.get(0));//這裡獲取到的是一個物件
session.close();//關閉會話
sessionFact.close();//關閉會話工廠