hibernate调用过程、函数

1.通过Hibernate API或者JDBC,API调用存储过程:

	CallableStatement cal = sess.connection().prepareCall(
			"{Call scott.selectdept(?,?)}");
	cal.setString(1, 10 + "");
	cal.registerOutParameter(2, OracleTypes.CURSOR);
	cal.executeQuery();
	ResultSet rs = (ResultSet) cal.getObject(2);
	while (rs.next()) {
		System.out.println(rs.getString(1) + "  " + rs.getString(2));
	}

调用函数(不是SQL语句):

		CallableStatement cal=con.prepareCall("{call ?:=get_sal(?)}");//函数
		cal.registerOutParameter(1, Types.DOUBLE);
		cal.setString(2, "7369");
		cal.executeQuery();
		String ss=cal.getString(1);
		System.out.println(ss);

2.直接使用 Hibernate createQuerySql调用函数:

	Session sess=fac.getCurrentSession();
	Transaction tran = sess.beginTransaction();
	SQLQuery squery = sess
		.createSQLQuery("select get_sal(?) from scott.emp");
	squery.setParameter(0, "7369");
	List list = squery.list();
	tran.commit();

3.通过XML传统的映射方式去调用:

<sql-query name="funtest" callable="true">  
    <return alias="emp" class="org.han.entity.Emp">  
        <return-property name="empno" column="empno"></return-property>  
        <return-property name="ename" column="ename"></return-property>  
        <return-property name="job" column="job"></return-property>  
        <return-property name="mgr" column="mgr"></return-property>  
        <return-property name="hiredate" column="hiredate"></return-property>  
        <return-property name="sal" column="sal"></return-property>  
        <return-property name="comm" column="comm"></return-property>  
        <return-property name="dept" column="deptno"></return-property>  
        <return-property name="version" column="version"></return-property>  
    </return>  
    {?=call getemp.getempc(?)}  
</sql-query>
调用:
List<Emp> emps=session.getNamedQuery("funtest").setInteger(0, 10).list();  
for (Emp emp : emps) {  
    System.out.println(emp);  
}

4.hibernate注册自定义函数:

点击打开链接




  • 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、付费专栏及课程。

余额充值