Hibernaate 调用存储过程的方法
By:Roy.LiuLast updated:2014-02-05
hibernate 数据库编程中,调用存储过程有可能会碰到。虽然不是很常用,但在有些系统中确实存在,存储过程中有着复杂的逻辑,另外存储过程的效率应该相对比较好,所以如果合理使用存储过程, 存储过程还是很有生命力的。
创建一个mysql 的存储过程
如果用mysql 的语句去调用这个存储过程,会采用如下方式
hibernate 调用存储过程
一般来说 hibernate 调用存储过程一般有三种方法
1. native sql 原生的SQL 采用 createSQLQuery 去直接调用存储过程
创建一个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 方式,只是方式不一样,具体采用那一种方式,与你自己的程序风格和习惯相关, 自己采取适合自己的方式开发.From:一号门
COMMENTS