1.QBE
適合列表頁屬性并搜索
public List findTestByConn(Class test){
Example example = Example.create(test);
example.ignoreCase().enableLike(MatchMode.ANYWHERE);
example.excludeZeroes();//表示如果test對象中屬性值為NULL或數(shù)字類型為0的不加入查詢
Criteria criteria = this.getSession().createCriteria(Test.class).add(example);
return criteria.list();
}
注:該方法支持關(guān)系查詢,
this.getSession().createCriteria(Test.class).add(example)
.createCriteri(Test2.class).add(example);
2.集合過濾
this.getSession().createFilter(customer.getOrders(),"where this.price >1000 order by this.price").list();
同樣的效果:this.getSession().createQuery("from Order o where o.customer=:customer and o.price >1000 order by o.price").setEntity("customer",customer).list();
3.Query
String sql ="select id from T_test ";
SQLQuery query = getHibernateSession().createSQLQuery(sql);
query.addScalar("id", Hibernate.STRING);//此處不定義,可能拿不到正確的結(jié)果集
List<String> list = query.list();
4.QBC(可支持查詢部分字段)
DetachedCriteria detachedCriteria = getDetachedCriteriaByColum(columName, test.class, "t");
//忽略大小寫模糊匹配
detachedCriteria.add(Restrictions.like("t.property1", "abc", MatchMode.ANYWHERE).ignoreCase());
//不等于
detachedCriteria.add(Restrictions.ne("t.property2", "aaa"));
//等于
detachedCriteria.add(Restrictions.eq("t.property3", true));
//插入部分SQL限制結(jié)果集
detachedCriteria.add(Restrictions.sqlRestriction(this_.property6 not in(select id from test2));
//排序
detachedCriteria.addOrder(Order.asc("t.property4")).addOrder(Order.asc("t.property5"));
List list = getHibernateTemplate().findByDetachedCriteria(detachedCriteria);
//提供對查詢部分字段的封裝,適合單表
public DetachedCriteria getDetachedCriteriaByColum(String[] columName,
Class className, String alias) {
DetachedCriteria detachedCriteria = DetachedCriteria.forClass(
className, alias);
ProjectionList projectList = Projections.projectionList();
if (null == columName) {
return null;
}
for (String colum : columName) {
projectList
.add(Projections.property(alias + "." + colum).as(colum));
}
detachedCriteria.setProjection(projectList);
detachedCriteria.setResultTransformer(Transformers
.aliasToBean(className));
return detachedCriteria;
}
5.Projections類
Criteria criteria = session.createCriteria(cat.class);
criteria.setProjection(Projections.projectionList().add(Projections.rowCount())); //查詢總行數(shù)
criteria.add(Projections.avg(propertyName)); //求平構(gòu)值
criteria.add(Projections.min(propertyName)); //最小值
criteria.add(Projections.max(propertyName)); //最大值
criteria.add(Projections.sum(propertyName)); //求和
criteria.add(Projections.groupProperty(propertyName)); //分組