Hibernate 调用函数及存储过程

一、函数

第一种方式:获得connection

		Connection conn = session.connection();
		CallableStatement call = conn.prepareCall("{?=call getemp.getempc(?)}");
		call.registerOutParameter(1, OracleTypes.CURSOR);// 设置输出变量类型
		call.setInt(2, 10);
		call.executeQuery();
		ResultSet rs = (ResultSet) call.getObject(1);
		while (rs.next()) {
			System.out.println(rs.getString(3));
		}

对应函数包体:

create or replace package body getemp is
       function getempc(dno number) return sys_refcursor
       is
       type emp_cursor_type is ref cursor;
       emp_cursor emp_cursor_type;
       begin
             open emp_cursor for select * from scott.emp where deptno=dno;
             return emp_cursor;
       end;
end getemp;

二、存储过程

对应的存储过程:

create or replace procedure getdeptbyid(d out sys_refcursor,dno number,num number )
is
begin
       open d for select * from dept where deptno=dno and 1=num;
end;

第一种方式:获得connection

		Connection conn = session.connection();
		CallableStatement call = conn.prepareCall("{call getdeptbyid(?,?,?)}");
		call.registerOutParameter(1, OracleTypes.CURSOR);// 设置输出变量类型
		call.setInt(2, 10);
		call.setInt(3, 1);
		call.executeQuery();
		ResultSet rs = (ResultSet) call.getObject(1);
		while (rs.next()) {
			System.out.println(rs.getString(2));
		}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hibernate 中调用数据库函数可以使用 Hibernate 的 `@NamedNativeQuery` 或者 `@NamedStoredProcedureQuery` 注解来实现。下面分别介绍这两种方式: 1. 使用 `@NamedNativeQuery` 注解: ```java @Entity @NamedNativeQuery( name = "callYourFunction", query = "SELECT your_function_name(:param1, :param2) AS result", resultSetMapping = "YourFunctionResultMapping" ) @SqlResultSetMapping( name = "YourFunctionResultMapping", columns = { @ColumnResult(name = "result") } ) public class YourEntity { // ... } ``` 在上述代码中,`YourEntity` 是你要调用函数的实体类,`your_function_name` 是要调用的数据库函数名,`:param1` 和 `:param2` 是函数的参数。`@NamedNativeQuery` 注解定义了一个原生查询,通过 `query` 属性指定了调用函数的 SQL 语句,并使用 `resultSetMapping` 属性指定了查询结果的映射。 然后在代码中可以通过如下方式调用函数: ```java Query query = session.getNamedQuery("callYourFunction"); query.setParameter("param1", value1); query.setParameter("param2", value2); Object result = query.uniqueResult(); ``` 2. 使用 `@NamedStoredProcedureQuery` 注解: ```java @Entity @NamedStoredProcedureQuery( name = "callYourFunction", procedureName = "your_procedure_name", parameters = { @StoredProcedureParameter(mode = ParameterMode.IN, type = String.class, name = "param1"), @StoredProcedureParameter(mode = ParameterMode.IN, type = String.class, name = "param2"), @StoredProcedureParameter(mode = ParameterMode.OUT, type = Integer.class, name = "result") } ) public class YourEntity { // ... } ``` 在上述代码中,`YourEntity` 是你要调用函数的实体类,`your_procedure_name` 是要调用的存储过程名,`parameters` 属性定义了存储过程的参数和参数类型。 然后在代码中可以通过如下方式调用函数: ```java StoredProcedureQuery query = session.createNamedStoredProcedureQuery("callYourFunction"); query.setParameter("param1", value1); query.setParameter("param2", value2); query.execute(); Integer result = (Integer) query.getOutputParameterValue("result"); ``` 以上两种方式都可以用来调用数据库函数,具体选择哪种方式取决于你的需求和数据库环境。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值