public class StuInfo {
private int id;
private String stuName;
private String stuNo;
private int stuAge;
private String stuId;
private String stuSeat;
private String stuAddress;setters();getters();}
对应的数据库表:
if exists(select * from sysobjects where name='stuInfo')
drop table stuInfo
create table stuInfo /*创建学员信息表**/
(
stuName varchar(20) not null,-- 姓名,非空
stuNo char(6) not null,-- 学号,非空
stuAge int not null,-- 年齡,int 默认为4个长度
stuId numeric(18,0),
stuSeat smallint ,-- 坐位车,使用自增
stuAddress text -- 住址 可以为空
)
-- 给stuInfo添加一列
alter table stuInfo add id int identity(1,1) primary key;
创建存储过程:
-- 存储过程
if exists(select name from sysobjects where name='proc_stuInfo' and type='p')
drop proc proc_stuInfo
go
create proc proc_stuInfo
as
select * from stuInfo
go
-- 调用存储过程
exec proc_stuInfo;
在hibernate 中调用存储过程的几种方法。
第一种:命名查询
<sql-query name="getStuInfo" callable="true">
<return alias="stuInfo" class="com.hkrt.domain.StuInfo">
<return-property name="id" column="id" />
<return-property name="stuName" column="stuName" />
<return-property name="stuAge" column="stuAge" />
<return-property name="stuNo" column="stuNo"/>
<return-property name="stuSeat" column="stuSeat" />
<return-property name="stuAddress" column="stuAddress"/>
<return-property name="stuId" column="stuId"/>
</return>
{call proc_stuInfo()}
</sql-query>
List li=session.getNamedQuery("getStuInfo").list();
System.out.println(li.get(0));第二种:类型于jdbc
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();否则没有数据返回。