一、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;
    }

QBC查询、离线条件查询(DetachedCriteric)和分页查询模版的更多相关文章

  1. MySQL-复杂查询及条件-起别名-多表查询-04

    目录 基本查询语句及方法 测试数据创建 创建数据库与表 插入表记录数据 数据展示 常见结果排版 另一种结果排版 \G 简单查询语句的书写与执行顺序 查询语句书写 执行顺序 科普-- 起别名 写法 可以 ...

  2. ORACLE中的TOP-N查询(TOP-N分析)、分页查询

    TOP-N查询(TOP-N分析):就是获取某一数据集合中的前N条记录,实际应用中经常用到. Oracle中不支持SELECT TOP语句(MySQL中也没用此语句),需要借助ROWNUM伪列来实现TO ...

  3. MySql实现分页查询的SQL,mysql实现分页查询的sql语句 (转)

    http://blog.csdn.net/sxdtzhaoxinguo/article/details/51481430 摘要:MySQL数据库实现分页查询的SQL语句写法! 一:分页需求: 客户端通 ...

  4. MySql实现分页查询的SQL,mysql实现分页查询的sql语句

    一:分页需求: 客户端通过传递start(页码),limit(每页显示的条数)两个参数去分页查询数据库表中的数据,那我们知道MySql数据库提供了分页的函数limit m,n,但是该函数的用法和我们的 ...

  5. JavaWeb分页显示内容之分页查询的三种思路(数据库分页查询)

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6134851.html 在开发过程中,经常做的一件事,也是最基本的事,就是从数据库中查询数据,然后在客户端显示出 ...

  6. MySql实现分页查询的SQL,mysql实现分页查询的sql语句(转)

    http://blog.csdn.net/sxdtzhaoxinguo/article/details/51481430 摘要:MySQL数据库实现分页查询的SQL语句写法! 一:分页需求: 客户端通 ...

  7. EF core的原生SQL查询以及用EF core进行分页查询遇到的问题

    在用.net core进行数据库访问,需要处理一些比较复杂的查询,就不得不用原生的SQL查询了,然而EF Core 和EF6 的原生sql查询存在很大的差异. 在EF6中我们用SqlQuery和Exe ...

  8. JPA多条件复杂SQL动态分页查询

    概述 ORM映射为我们带来便利的同时,也失去了较大灵活性,如果SQL较复杂,要进行动态查询,那必定是一件头疼的事情(也可能是lz还没发现好的方法),记录下自己用的三种复杂查询方式. 环境 spring ...

  9. Hibernate 分页 查询

    昨天的作业  分页: 主要的代码块:(明天实现分页的封装) package com.cy.beans; import java.util.List; /** * 定义一个分页对象 * @author ...

  10. 【CoreData】分页查询和模糊查询

    在CoreData实际使用中,分页查询和模糊查询是必不可少的,接下来演示一下: 首先 // 1.创建模型文件 (相当于一个数据库里的表) // New File ———— CoreData ———— ...

随机推荐

  1. android设计,图标等概述

    作者:郦橙 锦妖 链接:https://www.zhihu.com/question/36813390/answer/87029428 著作权归作者所有,转载请联系作者获得授权. 简单复制,用于记录, ...

  2. git与github的使用

    git和github是两个完全不同的概念,就好比如雷锋与雷峰塔的关系. git是一个版本管理工具,用来更好的管理你的程序,比如你原来提交过的内容,以后虽然修改了,但是通过git这个工具, 可以把你原来 ...

  3. Javascript数组操作详细解答

    数组push()方法向数组尾部追加新元素,返回值为新数组的长度;括号里面带新追加的元素pop()方法从数组尾部移除一个元素,返回值为移除的元素括号里面不能带参数 shift()方法从数组头部移除一个元 ...

  4. js数组及数组应用(冒泡和二分,遍历输出)

    一.定义:1)var arr=new Array(); 加数据:arr[0]=1; 2)定义同时赋值:var arr=new Array(1,2,3,4,5); 3)调用:var arr=new Ar ...

  5. Java NIO学习笔记 NIO选择器

    Java NIO选择器 A Selector是一个Java NIO组件,可以检查一个或多个NIO通道,并确定哪些通道已准备就绪,例如读取或写入.这样一个线程可以管理多个通道,从而管理多个网络连接. 为 ...

  6. ex2:逻辑回归及正则条件下的练习

    EX2 逻辑回归练习 ​ 假设你是一个大学某系的管理员,你想根据两项考试结果来确定每个申请人的录取机会.你有以前申请人的历史资料以作为逻辑回归的训练集.对于每一个训练集,你拥有每个申请人的两项考试的分 ...

  7. 前端UI组件复用工具

    "懒"是第一生产力. 代码复用总是程序员喜闻乐见的,前端组件化的最终目的就是复用,今天我们就将深入探讨如何实现UI组件的复用. 通常我们所说的组件往往是包含业务逻辑的前端组件,而这 ...

  8. [Tool] Git 使用 与 Git Flow

    目录 简介 Git 命令 Git Flow 简介 Git是目前世界上最先进的分布式版本控制系统(没有之一). Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Lin ...

  9. BeanUtils.copyProperties VS PropertyUtils.copyProperties

    作为两个bean属性copy的工具类,他们被广泛使用,同时也很容易误用,给人造成困然:比如:昨天发现同事在使用BeanUtils.copyProperties copy有integer类型属性的bea ...

  10. CSS学习笔记10 相对定位,绝对定位与固定定位

    文档流中的元素的位置由元素在 (X)HTML 中的位置决定,这就是最原始的普通流,前面讲到的浮动CSS学习笔记08 浮动可以改变元素在文档流中的位置,除了这个我们还可以通过使用CSS的position ...