zoukankan      html  css  js  c++  java
  • QBC查询、离线条件查询(DetachedCriteric)和分页查询模版

    一、QBC检索步骤

      QBC检索步骤:

      1.调用Session的createCriteria()方法创建一个Criteria对象。

      2.设定查询条件。Expression类提供了一系列用于设定查询条件的静态方法,

      这些静态方法都返回Criterion实例,每个Criterion实例代表一个查询条件。

      Criteria的add()方法用于加入查询条件。

      3.调用Criteria的list()方法执行查询语句。该方法返回List类型的查询结果,在

      List集合中存放了符合查询条件的持久化对象。

    • 比较运算符

    • HQL运算符 QBC运算符 含义
    • = Restrictions.eq() 等于
    • <> Restrictions.not(Exprission.eq()) 不等于
    • > Restrictions.gt() 大于
    • >= Restrictions.ge() 大于等于
    • < Restrictions.lt() 小于
    • <= Restrictions.le() 小于等于
    • is null Restrictions.isnull() 等于空值
    • is not null Restrictions.isNotNull() 非空值
    • like Restrictions.like() 字符串模式匹配
    • and Restrictions.and() 逻辑与
    • and Restrictions.conjunction() 逻辑与
    • or Restrictions.or() 逻辑或
    • or Restrictions.disjunction() 逻辑或
    • not Restrictions.not() 逻辑非
    • in(列表) Restrictions.in() 等于列表中的某一个值
    • ont in(列表) Restrictions.not(Restrictions.in())不等于列表中任意一个值
    • between x and y Restrictions.between() 闭区间xy中的任意值
    • not between x and y Restrictions.not(Restrictions..between()) 小于值X或者大于值y

     

    离线(detached)查询和子查询

    DetachedCriteria类使你在一个session范围之外创建一个查询,并且可以使用任意的 Session来执行它。

    DetachedCriteria query = DetachedCriteria.forClass(Cat.class)

    .add( Property.forName("sex").eq('F') );

    Session session = ....;

    Transaction txn = session.beginTransaction();

    List results = query.getExecutableCriteria(session).setMaxResults(100).list();

    txn.commit();

    session.close();

    DetachedCriteria也可以用以表示子查询。条件实例包含子查询可以通过 Subqueries或者Property获得。

    DetachedCriteria avgWeight = DetachedCriteria.forClass(Cat.class)

    .setProjection( Property.forName("weight").avg() );

    session.createCriteria(Cat.class)

    .add( Property.forName("weight).gt(avgWeight) )

    .list();

    DetachedCriteria weights = DetachedCriteria.forClass(Cat.class)

    .setProjection( Property.forName("weight") );

    session.createCriteria(Cat.class)

    .add( Subqueries.geAll("weight", weights) )

    .list();

    *************************************************

    1. 创建一个Criteria 实例

    org.hibernate.Criteria接口表示特定持久类的一个查询。Session是 Criteria实例的工厂。

    Criteria crit = sess.createCriteria(Cat.class);

    crit.setMaxResults(50);

    List cats = crit.list();

     

    2. 限制结果集内容

    一个单独的查询条件是org.hibernate.criterion.Criterion 接口的一个实例。

    org.hibernate.criterion.Restrictions类 定义了获得某些内置Criterion类型的工厂方法。

    List cats = sess.createCriteria(Cat.class)   

    .add( Restrictions.like("name", "Fritz%") )      相当于=》select * from car where name like 'Fritz%'

    .add( Restrictions.between("weight", minWeight, maxWeight) )    

    .list();   

    约束可以按逻辑分组。

    List cats = sess.createCriteria(Cat.class)

    .add( Restrictions.like("name", "Fritz%") )

    .add( Restrictions.or(

    Restrictions.eq( "age", new Integer(0) ),

    Restrictions.isNull("age")

    ) )

    .list();

    List cats = sess.createCriteria(Cat.class)

    .add( Restrictions.in( "name", new String[] { "Fritz", "Izi", "Pk" } ) )

    .add( Restrictions.disjunction()

    .add( Restrictions.isNull("age") )

    .add( Restrictions.eq("age", new Integer(0) ) )

    .add( Restrictions.eq("age", new Integer(1) ) )

    .add( Restrictions.eq("age", new Integer(2) ) )

    ) )

    .list();

    ************************************************

    可以使用注入sessionFactory,继承HibernateDaoSupport,获得hibernate模版进行相关操作

     

     

    二、以分页查询为例

     

    业务层

    DetachedCriteric criteria=DetachedCriteric.forclass(Cat.class); //=>select *from cat;

    添加条件约束

    criteria.add(Restirctions.eq("flag","0"));  //select *from cat where flag='0';

    1、查询总记录数

    Long total= findCoundByDetachedCriteria(criteria);

    2、查询相关信息

    List<Cat> catinfo = findByCriteria(criteria);

    持久层   (可作为持久层的模版一直使用)

    查询总记录数

    public Long findCoundByDetachedCriteria(DetachedCriteria criteria) {
            //设置投影 ,给criteria添加投影条件
            criteria.setProjection(Projections.rowCount());  //select count(*) from cat;
            List<Long> findByCriteria = this.getHibernateTemplate().findByCriteria(criteria);
            if(findByCriteria.size()<=0){
                return null;
            }
                return findByCriteria.get(0);
            
        }

    //分页查询 select * from cat

    public List<Cat> findByCriteria(DetachedCriteria criteria,
                int firstResult, int maxResult) {
           List<Standard> list = this.getHibernateTemplate().findByCriteria(criteria, firstResult, maxResult);
            if(list.size()<=0){
                return null;
            }
           return list;
        }

     

  • 相关阅读:
    实现Email传送
    用角色来管理权限
    最大在线人数统计
    解决DataGrid显示时间格式问题
    3秒后自动跳转
    ASP.NET页面的处理顺序
    乱码问题
    动态生成button并关联其onclick事件
    获取用户计算机信息
    鼠标滚轮缩放图片(js)
  • 原文地址:https://www.cnblogs.com/fengjunming/p/7236973.html
Copyright © 2011-2022 走看看