首页 > 代码库 > hibernate条件查询 Criteria查询

hibernate条件查询 Criteria查询

criteria查询 的方法详解

1.获取 criteria对象

Criteria criteria = this.getSession().createCriteria(Record.class);

红色部分为实体类,此处的Record代表信息记录类

2.追加条件

criteria = criteria.add(Expression.eq("level", 1));

红色部分 Expression.eq("",""),两个参数第一个是 实体类中对应的属性名称,第二个是属性值。

Expression的方法有很多如:

Expression.like("name", "%1%"));-----用于模糊查询。

Expression.between(“level”,Object a1,Object a2);------参数一为属性;参数二是第一个范围值;参数三为第二个范围值。

Expression.isEmpty(propertyName);------判断属性是否为空。

Expression.addOrder(Order.desc("属性"));------排序倒序。

criteria.setFirstResult(0);------分页时候设置页面的第一个数据的索引。

criteria.setMaxResults();-----设置数据的页面显示大小。

3.添加别名(在关联表中使用)

criteria = criteria.createAlias("user", "u")----record实体类中有个用户user,添加用户的别称在sql中使用

再添加条件

criteria = criteria.createAlias("user", "u").add( Expression.eq("u.id", 1));-----记录表中用户为1的条件

4.查询某属性(tickitCount)的总和

Object object = criteria.setProjection(Projections.projectionList()
      .add(Projections.sum("tickitCount"))).uniqueResult();

5.查询总记录数

// 查询总记录条数
  rowCount = (Integer) criteria.setProjection(Projections.rowCount())
    .uniqueResult();
  criteria.setProjection(null);-----必须设置为null才能继续数据查询

6.查询获取结果

list = criteria.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP)------将结果转为map类型
    .list();
  Iterator iter = list.iterator();
  List<Video> returnList = new ArrayList<Video>();
  while (iter.hasNext()) {
   Map map = (Map) iter.next();
   Video video = (Video) map.get(criteria.ROOT_ALIAS);--------循环获取跟属性对象放入集合中
   returnList.add(video);
  }

7.处理重复数据

Projections.distinct();

  如:
criteria.setProjection(Projections.distinct(Projections.projectionList().add(Projections.groupProperty("password")).add(Projections.id())));