使用hibernate调用存储过程(当返回结果不是具体对应的实体时)

在java中,可以直接用jdbc调用存储过程,但是,如果项目中使用到了hibernate,那么我倾向使用hibernate来调用存储过程,使用jdbc或jdbcTemplate调用存储过程,代码实在太臃肿难看了。 网上查了很多资料,全是千篇一律,你抄我,我抄你,都是在调用存储过程时,还要具体的映射一个实体对象和一张表,
如:

   <class name="xxx.XxxxVO" table="proctest">
<id name="id" column="id">
<generator class="native"/>
</id>

<property name="name" column="name" type="string" />
<property name="age" column="age" type="integer" />
<property name="address" column="address" type="string" />

</class>


<sql-query name="getTest" callable="true">
<return alias="test" class="xxx.XxxxVO">

<return-property name="id" column="id" />
<return-property name="name" column="name" />
<return-property name="age" column="age" />
<return-property name="address" column="address" />
</return>
{call testProc(?)}
</sql-query>


如上例一样,我就纳闷了,这样的存储过程的调用,有多少意义,大多情况下,存储过程返回的结果集是复杂的结构,根本不是一张表对应的结构,可能在存储过程中操作了很多很多个表,包括N个临时表,此时,你让我对应哪个实体去?
但是自己尝试,原来是可以不对应实体的,即把sql-query 标签中的return模块直接去掉即可,如:
         <sql-query name="stat_corp_checkup_plan_pack_pro" callable="true">
{call yikang365.stat_corp_checkup_plan_pack_pro(?)}
</sql-query>


那么,上例可以改成如下:
     <sql-query name="getTest" callable="true">
{call testProc(?)}
</sql-query>


这样就可以不必要对应具体的实体对象和表了,可以做任意复杂的查询了,不过,这种情况下返回的是数组列表,
即List<Object[]> 格式的对象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值