Hibernate高级查询

1.QBE

 适合列表页属性并搜索

public List findTestByConn(Class test){

     Example example = Example.create(test);

     example.ignoreCase().enableLike(MatchMode.ANYWHERE);

     example.excludeZeroes();//表示如果test对象中属性值为NULL或数字类型为0的不加入查询

   Criteria criteria = this.getSession().createCriteria(Test.class).add(example);

    return criteria.list();

}

注:该方法支持关系查询,

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);//此处不定义,可能拿不到正确的结果集
    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限制结果集

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())); //查询总行数

      criteria.add(Projections.avg(propertyName)); //求平构值

      criteria.add(Projections.min(propertyName)); //最小值

      criteria.add(Projections.max(propertyName)); //最大值

      criteria.add(Projections.sum(propertyName)); //求和

      criteria.add(Projections.groupProperty(propertyName)); //分组


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值