0%

HIBERNATE–调用存储过程

由于我是利用SessionFactory调用存储过程,故说明一下。结合笔记中的存储过程–MySQL存储过程实现动态执行SQL进行理解。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//此处的10表示s_device0,s_device1,…s_device10,
//s_device表示数据库的表名
int detotal=procedureService.savetotal(10, “s_device”);
下面是dao的调用
@Repository
public class ProcedureDaoImpl<T> extends BaseDao<T> implements IProcedureDao{
@Override
public int savetotal(int count, String str) {
String procedure_name=“query_deviceCount”; //存储过程的名字
ProcedureCall query =this.getSession().createStoredProcedureCall(procedure_name);
//存入的字段 ParameterMode.IN表示存进来的参数值,ParameterMode.OUT最后执行完这个参数获得数值。
query.registerParameter(“p_num”, Integer.class, ParameterMode.IN).bindValue(count);
query.registerParameter(“p_strs”,String.class, ParameterMode.IN).bindValue(str);
query.registerParameter(“p_count”, Integer.class, ParameterMode.OUT);
System.out.println(query.getOutputs()); //获取执行存储过程最后输出的参数
return (int) query.getOutputs().getOutputParameterValue(“p_count”); //数据库输出参数的名字
}
}