zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    自学入门 Python 优质中文资源索引
    Crawlab Lite 正式发布,更轻量的爬虫管理平台
    一款被大厂选用的 Hexo 博客主题
    源码解读 Golang 的 sync.Map 实现原理
    探究 Go 语言 defer 语句的三种机制
    一道快速考察 Python 基础的面试题
    编写自己的 GitHub Action,体验自动化部署
    Python 2 与 3 共存了 11 年,新年就要和它道别
    30 年前的圣诞节,Python 序章被谱写
    文言文编程火了,可我完全学不懂
  • 原文地址:https://www.cnblogs.com/newRedFlower/p/4801234.html
Copyright © 2011-2022 走看看