Hibernate 查询

1,from T_User

返回所有T_Usre以及TUser子类的记录,假如存在TUser的两个子类TSysAdmin和TSysOperator,那么记录中将包含两个子类的所有数据,即使不在一个表中.

2,为了避免在代码中出现SQL语句,可以采用配置文件的方式.在实体映射文件(hbm.xml)中,通过query节点定义查询语句(与class节点同级):

<class>

....

</class>

<query name="queryByName">

<![CDATA[from TUser user where user.name=:name]]>

</query>

代码中调用:

Query query = session.getNameQuery("queryByName");

Iterator it=query.iterate();

3,联合查询

inner join,left outer join,right outer join,full join(不常用)

from TUser user inner join fetch user.addresses

inner join 返回所有满足关联条件的记录组合."fetch"关键字表明TAddress对象读出后立即填充到对的TUser对象中.如果忽略掉,结果集中,每个条目都是一个Object数组,其中包括了一个TUser对象及其对应的TAddress对象.

from TUser user left join fetch user.addresses

left join返回的结果集中包含了T_User表(HQL中位于左侧的表)中的所有记录及其对应的地址信息(如无,则以NULL替代)

from TUser user right join user.addresses

与left join相反,返回位于右侧的所有记录及其对应的T_User记录.注意:fetch关键字只对inner join left join有效

4,子查询

from TUser user where (select count(*) from user.addresses)>1

5,数据加载方式

a,即时加载 b,延时加载 c,预先加载(out join) d,批量加载

6,SQL查询

sql: select * from T_User where name='Erica'

代码:

String sql = "select {user.*} from T_User user ";

List list=session.createSQLQuery(sql,"user",TUser.class).list;

对于SQL语句,也可以在配置文件中定义 <sql-query name="queryUser"></sql-query>

存储过程使用

有如下存储过程Oracle:

CREATE OR REPLACE FUNCTION getUsersByAge(userAge in NUMBER)

RETURN

SYS_REFCURSOR AS c_user SYS_REFCURSOR;

BEGIN

OPEN c_user FOR

SELECT ID,NAME FROM TUSER WHERE AGE= userAge;

RETURN c_user;

END;

配置文件中:

<sql-query name="getUsesrByAge" callable="true">

<return alias="user" class="cn.zt.entity.TUser">

<return-property name="id" column="ID">

<return-property name="name" column="NAME">

</return>

{ ? = call getUsersByAge(?)}

</sql-query>

说明:sql-query节点的callable属性设定为true,指明当前查询基于存储过程定义

测试程序:

Query query=session.getNamedQuery("getUsersByAge");

query.setInteger(0,18);

List list=query.list();

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值