1. Hibernate 调用存储 (hibernate 定制查询)
Hibernate 调用存储过程
(hibernate 定制查询 <sql-query> )
案例:
通过调用存储过程,返回不同类别的统计结果,这里的结果需要与一个序列化类对应,使用序列化类对应的Hibernate配置文件来调用存储过程。
存储过程名称:pro_templeave(?,?,?,?,?,?,?) 【?表示参数】。
Hibernate的配置文件:
......
<hibernate-mapping>
<class name="com.oapms.model.AttendleavePro" table="" catalog="">
<id name="id" type="java.lang.Integer"> //必须要有主键
<column name="reqid" />
<generator class="native" />
</id>
<property name="belong" type="java.lang.String">
<column name="belong" length="45" />
</property>
<property name="scount" type="java.lang.String">
<column name="scount" length="45" />
</property>
<property name="stype" type="java.lang.String">
<column name="stype" length="45" />
</property>
通过调用存储过程,返回不同类别的统计结果,这里的结果需要与一个序列化类对应,使用序列化类对应的Hibernate配置文件来调用存储过程。
存储过程名称:pro_templeave(?,?,?,?,?,?,?) 【?表示参数】。
Hibernate的配置文件:
......
<hibernate-mapping>
<class name="com.oapms.model.AttendleavePro" table="" catalog="">
<id name="id" type="java.lang.Integer"> //必须要有主键
<column name="reqid" />
<generator class="native" />
</id>
<property name="belong" type="java.lang.String">
<column name="belong" length="45" />
</property>
<property name="scount" type="java.lang.String">
<column name="scount" length="45" />
</property>
<property name="stype" type="java.lang.String">
<column name="stype" length="45" />
</property>
//去指定一个对应关系, 其实 上边的<class>标签 和<sql-query>标签是一一对应的。
//return 标签是存储过程 每组返回值,各个列 对应 com.oapms.model.AttendleavePro类的那个属性
<loader query-ref="pro_templeave"></loader>
</class>
</class>
<sql-query name="pro_templeave" callable="true">
<return alias="AttendleavePro" class="com.oapms.model.AttendleavePro"> //alias 是别名的意思
<return-property name="id" column="reqid"/>
<return-property name="belong" column="reqbelong"/>
<return-property name="scount" column="scount"/>
<return-property name="stype" column="leavetype"/>
</return>
{?=call pro_templeave(?,?,?,?,?,?,?)}
</sql-query>
</hibernate-mapping>
调用存储过程:
......
public List getStatisticsList(String parentid, String belong,String begindate,String enddate,int flag,String name,int oper,int which){
List statisticsList = new ArrayList();
try{
String procedure=“”;
if(which==1){
//请假统计的存储过程
procedure = "pro_templeave";
}else{
//考勤统计的存储过程
procedure = "pro_tempvalue";
}
Session session = HibernateSessionFactory.getSession();
//1.指定一个查询, getNamedQuery(procedure).传入的值,将会被配置文件,
// 告诉配置配置文件去调用哪个存储过程,及存储过程如何的封装
//2.调用存储过程时,要给存储过程传递参数 0-6 一共给存储过程返回了七个参数值。
List tmplist = session.getNamedQuery(procedure).setString(0, parentid).setString(1, belong)
.setString(2, begindate).setString(3, enddate).setInteger(4, flag).setString(5, name)
.setInteger(6, oper).list();
HibernateSessionFactory.closeSession();
return tmplist;
}
catch(Exception e){
e.printStackTrace();
return null;
}
}
注意: 调用存储过程必须返回结果集,而且必须要有Id值。
List tmplist = session.getNamedQuery(procedure).setString(0, parentid).setString(1, belong)
.setString(2, begindate).setString(3, enddate).setInteger(4, flag).setString(5, name)
.setInteger(6, oper).list();
HibernateSessionFactory.closeSession();
return tmplist;
}
catch(Exception e){
e.printStackTrace();
return null;
}
}
注意: 调用存储过程必须返回结果集,而且必须要有Id值。
posted on 2014-01-03 21:30 fantiejun0436 阅读(147) 评论(0) 收藏 举报
浙公网安备 33010602011771号