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