您的位置:首页 > 其它

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

2016-07-11 23:41 399 查看

普通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 < :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):计算属性值的总和。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: