Hibernate-命名SQL查询

Hibernate使用<sql-query/>元素来配置命名SQL查询,配置<sql-query/>元素有一个必填的name属性,该属性用以指定该命名SQL查询的名称。

使用<sql-query/>元素定义命名查询时,通常可以包含一个或多个的如下子元素:
<return/>:将查询结果转换成持久化实体。

<return-join/>:预加载持久化实体的关联实体。

<return-scalar>:将查询的数据列转换成标量值。

在使用命名SQL查询时,不需要调用addEntity()、addScalar()等方法,因为在配置命名SQL查询时,已经指定了查询返回的结果信息。

<sql-query name="queryTest">

        <!--将s别名转换成lee.Student实体-->

        <return alias="s" class="lee.Student"/>

        <!--将e别名转换成lee.Enrolment实体-->

        <return alias="e" class="lee.Enrolment"/>

        <!--预初始化e的course属性(关联实体)-->

        <return-join alias="c" class="e.course"/>

        <!--指定将student表的name列作为标量返回-->

        <return-scalar column="s.name" type="string"/>

       select s.*,e.*,c.* from student s,enrolment e,course c

       where s.student_id = e.student_id and e.course_code = c.course_code

       and e.year =: targetYear

</sql-query>

使用Session的getNamedQuery即可获取指定命名SQL查询,代码片段如下:

List l = session.getNamedQuery("queryTest")

            .setInteger("targetYear",2005)

            .list();

除此之外,Hibernate允许把结果集的映射信息放在<resultset/>元素来定义,这样就可让多个命名查询公用结果集映射。通过<sql-query/>元素制定resultset-ref属性,就可让命名SQL查询使用一个已有的结果映射了。例如,定义一个独立的结果集映射:

<resultset name="studentGroup">

          <return alias="s" class="lee.Student"/>

          <return-scalar column="s.name" type="string"/>

</resultset>

下面的命名SQL查询就可使用上面的结果集映射信息了:

<sql-query name="test" resultset-ref="studentGroup">

select s.* from student s

</sql-query>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值