Hibernaate 调用存储过程的方法

摘要: hibernate 数据库编程中,调用存储过程有可能会碰到。虽然不是很常用,但在有些系统中确实存在,存储过程中有着复杂的逻辑,另外存储过程的效率应该相对比较好,所以如果合理使用存储过程, 存储过程还是很有生命力的, 一般来说有三种方式实现 hibernate 调用存储过程, 其实这三种方式实现hibernate 调用存储过程,并没有什么本质的不同,其实都是原生SQL 方式,只是方式不一样,具体采用那一种方式,与你自己的程序风格和习惯相关, 自己采取适合自己的方式开发.

hibernate 数据库编程中,调用存储过程有可能会碰到。虽然不是很常用,但在有些系统中确实存在,存储过程中有着复杂的逻辑,另外存储过程的效率应该相对比较好,所以如果合理使用存储过程, 存储过程还是很有生命力的。

创建一个mysql 的存储过程

DELIMITER $$
 
Create PROCEDURE `GetStocks`(int_stockcode VARCHAR(20))
BEGIN
   Select * FROM stock Where stock_code = int_stockcode;
   END $$
 
DELIMITER ;


如果用mysql 的语句去调用这个存储过程,会采用如下方式
CALL GetStocks('123456');


hibernate 调用存储过程
一般来说 hibernate 调用存储过程一般有三种方法

1. native sql 原生的SQL 采用 createSQLQuery 去直接调用存储过程
Query query = session.createSQLQuery(
	"CALL GetStocks(:stockCode)")
	.addEntity(Stock.class)
	.setParameter("stockCode", "7277");
 
List result = query.list();
for(int i=0; i

2. 采用命名查询方式,其实也是native sql 方式,只是用注解方式罢了
//Stock.java
...
@NamedNativeQueries({
	@NamedNativeQuery(
	name = "callStockStoreProcedure",
	query = "CALL GetStocks(:stockCode)",
	resultClass = Stock.class
	)
})
@Entity
@Table(name = "stock")
public class Stock implements java.io.Serializable {
...


调用 getNamedQuery 方法.

Query query = session.getNamedQuery("callStockStoreProcedure")
	.setParameter("stockCode", "7277");
List result = query.list();
for(int i=0; i

3. 将 sql 语句写在 XML 配置文件中的方式实现

!-- Stock.hbm.xml -->
...

    
        
            
            
        
        
            
        
        ...
    
 
    
	
	
    
 



同样调用 getNamedQuery() 方法
Query query = session.getNamedQuery("callStockStoreProcedure")
	.setParameter("stockCode", "7277");
List result = query.list();
for(int i=0; i

总结,其实这三种方式实现hibernate 调用存储过程,并没有什么本质的不同,其实都是原生SQL 方式,只是方式不一样,具体采用那一种方式,与你自己的程序风格和习惯相关, 自己采取适合自己的方式开发.

上一篇: maven 工程启动找不到 Spring ContextLoaderListener 的解决办法
下一篇: spring3 restful 服务迁移到 spring4需要注意的事项
 评论 ( What Do You Think )
名称
邮箱
网址
评论
验证
   
 

 


  • 微信公众号

  • 我的微信

站点声明:

1、一号门博客CMS,由Python, MySQL, Nginx, Wsgi 强力驱动

2、部分文章或者资源来源于互联网, 有时候很难判断是否侵权, 若有侵权, 请联系邮箱:summer@yihaomen.com, 同时欢迎大家注册用户,主动发布无版权争议的 文章/资源.

3、鄂ICP备14001754号-3, 鄂公网安备 42280202422812号