1. 程式人生 > >用hibernate呼叫儲存過程

用hibernate呼叫儲存過程

儲存過程是將一組需要重複執行的操作封裝在一起存放在伺服器中,支援使用者提供的變數,具有強大的程式設計功能, 可以使用各種sql語句和過程式語句的組合,來封裝資料庫應用中複雜的業務邏輯和處理規則.

使用儲存過程的優點就是:
    1.儲存過程是預編譯的可執行程式碼,提高效率

2.將常用的操作集編寫成儲存過程,一次編寫可多次使用,程度可重用

Hibernate中使用儲存過程有很多種方法,
1. 使用hibernate命名查詢
2. 使用JDBC的方法
大概方法如下
a) 獲取hibernatesession
b) 用session獲取Connection
c) 例項化ResultSet
d) CallableStatement call= conn.prepareCall(“{ 儲存過程執行語句}”);
e) 返回資料,關閉資料庫連線,和session連線

  1. 使用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();//關閉會話工廠