普通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):计算属性值的总和。