文档章节

hibernate 调用存储过程

吕兵阳
 吕兵阳
发布于 2015/10/17 11:35
字数 534
阅读 32
收藏 1

笔者参考原文:http://www.iteye.com/topic/176032

使用hibernate 调用存储过程。

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();否则没有数据返回。

hibenate 调用带参的存储程

-- 带参数据的存储过程
if exists(select name from sysobjects where name='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
	public void 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]



版权声明:本文为博主原创文章,未经博主允许不得转载。

本文转载自:http://blog.csdn.net/liuc0317/article/details/6626192

共有 人打赏支持
吕兵阳
粉丝 84
博文 274
码字总数 104891
作品 0
郑州
后端工程师
hibernate sql 查询

Hibernate 支持使用原生的SQL查询,使用原生SQL查询可以利用某些数据库特性,原生SQL查询也支持将SQL语句放在配置文件中配置,从而提高程序的解耦,命名SQL查询还可以用于调用存储过程。 SQL查...

DaDa-da
04/23
0
0
hibernate中调用存储过程

我搭建的一个ssh1(spring2.5.6+hibernate3.4+struts1.3.8)框架中需要提供一个调用存储过程的公有方法。 原理:这个其实和ssh没啥关系,主要是我们的java.sql.Connection中已经提供了这样的...

索隆
2012/06/23
0
0
Hibernate 存储过程的调用

本文讲述的是Hibernate 存储过程的调用,首先给出了简单的Hibernate存储过程并附其Java代码,然后给出了调用方法的Java代码,及其它相应的Java代码。 下边是简单的Hibernate存储过程 Java代码...

鉴客
2010/08/23
1K
1
hibernate调用mysql存储过程

 在mysql中创建两个存储过程,如下: 1、根据id查找某条数据: 1 CREATE PROCEDURE (IN id INTEGER(11))2 begin3 select * from emp where empId=id;4 end; 2、根据id查找某个字段,并返回 ...

开源中国-首席码农
2016/03/22
2
0
hibernate批量修改,批量删除

在Hibernate应用中如何处理批量更新和批量删除? 批量更新是指在一个事务中更新大批量数据,批量删除是指在一个事务中删除大批量数据。以下程序直接通过Hibernate API批量更新CUSTOMERS表中年...

Kerry_Han
2013/08/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

c语言之内存分配笔记

先看一个数组: short array[5] = {1,2} // 这儿定义的一个int类型的数组,数组第1和第2个元素值是1和2.其余后面默认会给值为0; 或者 short array[] = {1,2};//这儿数组第1和第2个元素,数组...

DannyCoder
今天
2
0
Shell | linux安装包不用选择Y/N的方法

apt-get install -y packageOR echo "y" | sudo apt-get install package

云迹
今天
2
0
Hadoop的大数据生态圈

基于Hadoop的大数据的产品圈 大数据产品的一句话概括 Apache Hadoop: 是Apache开源组织的一个分布式计算开源框架,提供了一个分布式文件系统子项目(HDFS)和支持MapReduce分布式计算的软件架...

zimingforever
今天
5
0
八大包装类型的equals方法

先看其中一个源码 结论:八大包装类型的equals方法都是先判断类型是否相同,不相同则是false,相同则判断值是否相等 注意:包装类型不能直接用==来等值比较,否则编译报错,但是数值的基本类型...

xuklc
今天
2
0
NoSQL , Memcached介绍

什么是NoSQL 非关系型数据库就是NoSQL,关系型数据库代表MySQL 对于关系型数据库来说,是需要把数据存储到库、表、行、字段里,查询的时候根据条件一行一行地去匹配,当量非常大的时候就很耗...

TaoXu
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部