一、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. JavaScript 循环性能比较

    有一句话叫做 没有什么事是一个循环解决不了的,如果真有,那就再来一个循环. 循环的种类有很多 正向for循环,逆向for循环,while循环,for-in循环(理论上性能最差),for-each循环, ...

  2. 推荐五款Android 应用的自动化测试工具

    如今自动化测试已经应用到每天的测试中.这不足为奇,因为自动化测试在测试过程中节约了时间,还能避免包括人为因素造成的测试错误和遗漏. 自动化测试工具选择很多.一些是开源的,一些非常贵.一些自动化工具是几 ...

  3. 惊心动魄的SAP S4客户额度调整运动

    今天一大早,收到商务部发来的消息,说某一个客户的额度超额了,但实际上并未超额.从SAP系统中反馈的额度来看,显示超了2万多.后来经过在BP画面检查信用段发现,这个客户额度占用里面,某一个未清订单已经部 ...

  4. Hibernate入门(三)

    一 Hibernate生成器类 Hibernate中,标签id中的generator标签用于生成持久化类对象的唯一标识.所有的生成器类都实现了org.hibernate.id.IdentifierGe ...

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

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

  6. 实现简易版的moment.js

    github源码地址: www.baidu.com 作者: 易怜白 项目中使用了时间日期的处理方法,只使用了部分方法,为了不在引入第三方的库(moment.js),这里自己封装了项目中使用到的方法. ...

  7. react-native 学习 ----- React Navigation

    很久没有的登陆博客园了,密码都是找回的,从当年的大学生已经正常的走上了程序员的道路,看到之前发的博客还是写的android,现在自己已经在使用了react-native了. 大学毕业了,做了java后 ...

  8. Qt使用MySQL笔记一

    原始日期:2015-08-20 18:01 今天开发项目时,遇到一个问题,经过自己不断尝试,终于找到了解决办法,于是赶紧记下来,不然过段时间可能又忘了呵呵,从而重蹈覆辙,浪费时间~问题是这样的:在插入 ...

  9. 巧用五招提升Discuz!X运行速度

    Discuz!X使用的是数据库应用程序,所以,当数据库的大小.帖子的数目.会员的数目,这些因素都会影响到程序的检索速度,尤其是当论坛的影响力大了,这个问题就更为突出了,虽然,康盛对Discuz进行了更 ...

  10. mac下git配置和jenkins打包

    今天自己配置了下jenkins,还算是比较顺利,把整个过程和大家分享下. 1. 查看秘钥是否存在 打开终端查看是否已经存在SSH密钥:cd ~/.ssh 如果没有密钥则不会有此文件夹,有则备份删除, ...