使用hibernate 呼叫儲存過程。
阿新 • • 發佈:2019-02-10
- publicclass StuInfo {
- privateint id;
- private String stuName;
- private String stuNo;
- privateint stuAge;
- private String stuId;
- private String stuSeat;
- private String stuAddress;
- setters();getters();
對應的資料庫表:
-
if exists(select * from sysobjects where
- droptable stuInfo
- createtable stuInfo /*建立學員資訊表**/
- (
- stuName varchar(20) notnull,-- 姓名,非空
- stuNo char(6) notnull,-- 學號,非空
- stuAge intnotnull,-- 年齡,int 預設為4個長度
- stuId numeric(18,0),
- stuSeat smallint ,-- 坐位車,使用自增
- stuAddress text -- 住址 可以為空
- )
- -- 給stuInfo新增一列
-
altertable stuInfo
建立儲存過程:
- -- 儲存過程
- if exists(selectnamefrom sysobjects wherename='proc_stuInfo'and type='p')
- drop proc proc_stuInfo
- go
- create proc proc_stuInfo
- as
- select * from stuInfo
- go
- -- 呼叫儲存過程
- exec proc_stuInfo;
在hibernate 中呼叫儲存過程的幾種方法。
第一種:命名查詢
-
<
- <returnalias="stuInfo"class="com.hkrt.domain.StuInfo">
- <return-propertyname="id"column="id"/>
- <return-propertyname="stuName"column="stuName"/>
- <return-propertyname="stuAge"column="stuAge"/>
- <return-propertyname="stuNo"column="stuNo"/>
- <return-propertyname="stuSeat"column="stuSeat"/>
- <return-propertyname="stuAddress"column="stuAddress"/>
- <return-propertyname="stuId"column="stuId"/>
- </return>
- {call proc_stuInfo()}
- </sql-query>
- List li=session.getNamedQuery("getStuInfo").list();
- System.out.println(li.get(0));
- System.out.println("jdbc 呼叫-------------");
- Connection conn = session.connection();
- ResultSet rs =null;
- CallableStatement call;
- try {
- call = conn.prepareCall("{Call proc_stuInfo()}");
- rs = call.executeQuery();
- while(rs.next()){
- System.out.println(rs.getString(1));
- System.out.println(rs.getString(2));
- System.out.println(rs.getString(3));
- System.out.println(rs.getString(4));
- System.out.println(rs.getString(5));
- System.out.println(rs.getString(6));
- System.out.println(rs.getString(7));
- System.out.println("------------------");
- }
- } catch (SQLException e) {
- e.printStackTrace();
- }
第三種:最簡單的一種
- SQLQuery query = session.createSQLQuery("{call proc_stuInfo()}").addEntity(StuInfo.class);
- List list =query.list();
- System.out.println(list.get(0));
注:在第三種呼叫時,一定要加上addEntity();否則沒有資料返回。
hibenate 呼叫帶參的儲存程
- -- 帶引數據的儲存過程
- if exists(selectnamefrom sysobjects wherename='proc_find_stu'and type='p')
- drop proc proc_find_stu
- go
- create proc proc_find_stu(@startId int,@endId int)
- as
- select * from stuInfo where id between @startId and @endId;
- go
- exec proc_find_stu 1,4;
- /**hibernate 呼叫帶參的儲存過程*/
- @SuppressWarnings("unchecked")
- @Test
- publicvoid msTest2(){
- SessionFactory sf = SessionFactoyUtil.getSessionFactory();
- Session session = sf.openSession();
- SQLQuery query = session.createSQLQuery("{CALL proc_find_stu(?,?)}").addEntity(StuInfo.class);
- query.setLong(0, 2);
- query.setLong(1, 4);
- List<StuInfo> list =query.list();
- for(int i =0;i<list.size();i++){
- System.out.println(list.get(i));
- }
- }
- Hibernate:
- {CALL proc_find_stu(?,?)}
- StuInfo [id=2, stuAddress=北京, stuAge=12, stuId=123456789012345687, stuName=李四, stuNo=112345, stuSeat=2]
- StuInfo [id=4, stuAddress=北京, stuAge=12, stuId=123456789012345688, stuName=王五, stuNo=112345, stuSeat=3]