• Hibernate 之 org.hibernate.Criteria


    1.概念区分 Criteria Criterion Restrictions

    Criteria:代表一次查询。

    Criterion:代表一个条件查询。

    Restrictions:产生条件查询的工具类。

    2.进行一次查询的步骤     

    1.       获取Hibernate的Session对象。

    2.       以Session对象创建Criteria对象。

    3.       使用Restrictions的静态方法创建Criterion查询条件。

    4.       向Criteria添加Criterion查询条件。

    5.       执行Criteria的list等方法返回结果

      代码示例:

     1 Configuration c = new Configuration().configuration();
     2 SessionFactory sf = c.buildSessionFactory();
     3 Session s = sf.openSession();
     4 Criteria t = s.createCriteria(User.class);//物件表名是User;
     5 t.add(Restrictions.gt("age", "20"));//选择age>20
     6 t.add(Restrictions.lt("age", "30"));//选择age<30
     7 t.addOrder(Order.desc("age"));//排序
     8 List users = t.list();
     9 for(Iterator it = user.iterator();it.hasnext())
    10 {
    11 User user = (User)it.next();
    12 System.out.println(user.getUsername()+"	"+user.getPassword()+"	"+user.getAge());
    13 }

    3. 复杂查询

    3.1 Restrictions里面常用的方面具体如下

    Restrictions.eq--->等於
    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关系

    3.2 排序

     您可以使用Criteria进行查询,并使用org.hibernate.criterion.Order对结果进行排序,例如使用Oder.asc(),指定根据”age”由小到大排序(反之则使用desc()):  

    Criteria criteria = session.createCriteria(User.class);
    criteria.addOrder(Order.asc("age"));
    List users = criteria.list();

    注意在加入Order条件时,使用的是addOrder()方法,而不是add()方法,在产生SQL语句时,会使用order by与asc(desc)来进行排序指定.

    对应的sql语句为:Hibernate: select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_ from T_USER this_ order by this_.age asc

    3.3 分页查询

    Criteria的setMaxResults()方法可以限定查询回来的笔数,如果配合setFirstResult()设定传回查询结果第一笔资料的位置,就可以实现简单的分页,例如传回第51笔之后的50笔资料(如果有的话):

    Criteria criteria = session.createCriteria(User.class);criteria.setFirstResult(51);criteria.setMaxResults(50);List users = criteria.list();

    根据您所指定得资料库,Hibernate将自动产生与资料库相依的限定笔数查询子句,例如在MySQL中,将使用limit产生以下的SQL语句:

    Hibernate: select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_ from T_USER this_ limit ?, ?

    3.4 统计函数

    您可以对查询结果进行统计动作,使用org.hibernate.criterion.Projections的统计函数,avg()、rowCount()、count()、max()、min()、 countDistinct()等方法。

    操作步骤:

    1. 生成Projection

    2. 使用setProjection向Criteria添加Projection。

    1 Projection p = Projections.rowCount();
    2 Criteria.setProjection(p);

    3.5 分组 http://jingyan.baidu.com/article/0964eca233d7cf8284f53656.html

     

  • 相关阅读:
    [OpenStack] openstack keystone api 实验(curl)(转载)(亲自动手实验,附带实验运行结果)
    [Hadoop in China 2011] 中兴:NoSQL应用现状及电信业务实践
    [转]Windows Server 2012 和 System Center 2012 SP1,Virtual Machine Manager 中启用的软件定义的网络
    [Hadoop in China 2011] Facebook Message在HBase基础上的应用
    [转] ETL工具介绍
    [Hadoop in China 2011] eBay:选择HBase建立搜索引擎的原因
    [Cloudera Hadoop] CDH 4.0 Quick Start Guide (动手实践,最新版CDH4.0,企业版Hadoop)
    云操作系统OpenStack 优势与问题并存
    [OpenStack Crowbar] Build Crowbar.ISO
    [OpenStack] OpenStack ESSEX 全新手动安装,动手,实践,出真知!
  • 原文地址:https://www.cnblogs.com/newRedFlower/p/4801234.html
Copyright © 2020-2023  润新知