Hibernate笔记(4)-hql查询与Criteria查询

本文介绍Hibernate框架下多种查询方式,包括HQL、原生SQL、模板查询等,并详细讲解了分页查询、过滤器查询及Criteria API的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

普通Hql查询

Query query = session.createQuery(hql)
//设置占位符,从0开始
query.setLong(0,4);
query.list()

原生SQL查询

将查询出来的每一条记录,封装成一个Object类型的数组,然后把这些数组封装到集合中返回

SQLQuery query = session.createSQLQuery(sql);
query.setLong(0,4)
List<Object[]> lines = query.list();

N+1查询

Iterator<Demo> iter = query.iterate();

模板查询

Demo demo = new Demo();
demo.setName("struts");
Criteria criteria = session.createCriteria(Demo.class).add(Example.create(line));
List<Line> lines = criteria.list();

分页查询

query.setMaxResults(3);
query.setFirstResult(5);

将hql语句写在xml中

Query query = session.getNamedQuery("queryDemoById");
query.setLong(0,33)
//demo.hbm.xml中
    <query name="queryLineById">
        <![CDATA[
            from Line where id=?
        ]]>
    </query>

过滤器查询

session.enableFilter("idFilter").setParameter("myId",241);
String hql = "from Demo";
Query query= session.createQuery(hql);

//demo.hbm.xml中
<filter name="idFilter" condition="id &lt; :myId"></filter>

<filter-def name="idFilter">
        <filter-param name="myId" type="java.lang.Long"/>
</filter-def>

Criteria模板

org.hibernate.Criteria实际上是个条件附加的容器

模板查询其他用法:

//限制结果集内容
session.createCriteria(Demo.class).add(Restrictions.like("name","Fri%"));
//约束按照逻辑分组
session.createCriteria(Demo.class).add(Restrictions.or(Restrictions.eq("age"),new Integer(0)) );
session.createCriteria(Demo.class).add(Restrictions.gt("age", new Integer(20)));
session.createCriteria(Demo.class).add(Restrictions.lt("age", new Integer(40)));

方法 说明
Restrictions.eq 等于
Restrictions.allEq 使用Map,使用key/value进行多个等于的比对
Restrictions.gt 大于 >
Restrictions.ge 大于等于 >=
Restrictions.lt 小于 <
Restrictions.le 小于等于 <=
Restrictions.between 对应SQL的BETWEEN子句
Restrictions.like 对应SQL的LIKE子句
Restrictions.in 对应SQL的in子句
Restrictions.and and关係
Restrictions.or or关係

//结果集排序
session.createCriteria(Demo.class).addOrder(Order.asc("name")).setMaxResult();
//投影查询
ProjectionList proList = Projections.projectionList();
proList.add(Projections.groupProperty("name"));
proList.add(Projections.groupProperty("id"));
① avg(String propertyName):计算属性字段的平均值。
② count(String propertyName):统计一个属性在结果中出现的次数。
③ countDistinct(String propertyName):统计属性包含的不重复值的数量。
④ max(String propertyName):计算属性值的最大值。
⑤ min(String propertyName):计算属性值的最小值。
⑥ sum(String propertyName):计算属性值的总和。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值