文档章节

hibernate 调用存储过程

吕兵阳
 吕兵阳
发布于 2015/10/17 11:35
字数 534
阅读 40
收藏 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

共有 人打赏支持
吕兵阳
粉丝 87
博文 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调用存储过程示例(有参数,返回结果集)

1、存储过程 2、数据库客户端执行存储过程如下: 执行结果如下: 3、java代码通过hibernate调用存储过程 打印结果: FreezeMon:2017-09 meterid:0351-09768 4、hibernate取出存储过程的输出参...

ytangdigl
2017/10/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

linux使用ntfs-3g操作ntfs格式硬盘

Linux内核目前只支持对微软NTFS文件系统的读取。 NTFS-3G 是微软 NTFS 文件系统的一个开源实现,同时支持读和写。NTFS-3G 开发者使用 FUSE 文件系统来辅助开发,同时对可移植性有益。 安装 ...

linuxprobe16
今天
1
0
kubeadm部署kubernetes集群

一、环境要求 这里使用RHEL7.5 master、etcd:192.168.10.101,主机名:master node1:192.168.10.103,主机名:node1 node2:192.168.10.104,主机名:node2 所有机子能基于主机名通信,编辑...

人在艹木中
今天
10
0
Shell特殊符号总结以及cut,sort,wc,uniq,tee,tr,split命令

特殊符号总结一 * 任意个任意字符 ? 任意一个字符 # 注释字符 \ 脱义字符 | 管道符 # #号后的备注被忽略[root@centos01 ~]# ls a.txt # 备注 a.txt[root@centos01 ~]# a=1[root@centos01...

野雪球
今天
3
0
OSChina 周二乱弹 —— 程序员圣衣

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文:分享Skeeter Davis的单曲《The End of the World》 《The End of the World》- Skeeter Davis 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
20
0
[ python import module ] 导入模块

import moudle_name ----> import module_name.py ---> import module_name.py文件路径 -----> sys.path (这里进行查找文件) # from app.web import Personimport app.web.Person as Pe......

_______-
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部