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

时间: 2024-10-05 23:09:14

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

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

目录 基本查询语句及方法 测试数据创建 创建数据库与表 插入表记录数据 数据展示 常见结果排版 另一种结果排版 \G 简单查询语句的书写与执行顺序 查询语句书写 执行顺序 科普-- 起别名 写法 可以对字段做四则运算(加减乘数) concat 格式化拼接字段 concat_ws 用指定字符拼接字段 定制化查询结果 常见的数据定制化关键字(非多表查询) where 结合过滤条件过滤结果 > < = != <= >= <> 比较运算符 and or not 与或非连接多个条

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

http://blog.csdn.net/sxdtzhaoxinguo/article/details/51481430 摘要:MySQL数据库实现分页查询的SQL语句写法! 一:分页需求: 客户端通过传递start(页码),limit(每页显示的条数)两个参数去分页查询数据库表中的数据,那我们知道MySql数据库提供了分页的函数limit m,n,但是该函数的用法和我们的需求不一样,所以就需要我们根据实际情况去改写适合我们自己的分页语句,具体的分析如下: 比如: 查询第1条到第10条的数据的s

Oracle查询前10条记录及分页查询(第5条到第10记录)

如果你想了解Oracle查询前10条记录的相关实际应用方案的话,你就可以点击以下的文章对其在实际相关操作中的正确用法,有一个更加完善的认识,希望你在浏览完以下的文章会以下就是正文的详细内容的介绍. 在Oracle怎样查询表中的top10条记录呢? select *   from test   where rownum <=10   下面是关于rownum的介绍 Rownum和row_number() over()的使用 ROWNUM是Oracle从8开始提供的一个伪列,是把SQL出来的结果进行编

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

一:分页需求: 客户端通过传递start(页码),limit(每页显示的条数)两个参数去分页查询数据库表中的数据,那我们知道MySql数据库提供了分页的函数limit m,n,但是该函数的用法和我们的需求不一样,所以就需要我们根据实际情况去改写适合我们自己的分页语句,具体的分析如下: 比如: 查询第1条到第10条的数据的sql是:select * from table limit 0,10;   ->对应我们的需求就是查询第一页的数据:select * from table limit (1-1

SQL带条件,联合,分页查询语句

alter PROCEDURE Term4GetPagedData@pageIndex int = 1,--页码@pageSize int =10,--页容量@sMid int,@rowCount float output,--输出 总行数@pageCount float output--输出 总页数ASBEGINselect @rowCount = COUNT(sId) from Strategy where [email protected] --求总行数set @pageCount= CE

框架 day50 BOS项目 4 批量导入(ocupload插件,pinyin4J)/POI解析Excel/Combobox下拉框/分区组合条件分页查询(ajax)/分区数据导出(Excel)

知识点: 批量导入(ocupload插件,pinyin4J /POI解析Excel(apache POI) /区域分页查询 /Combobox下拉框 /分区组合条件分页查询(ajax) /分区数据导出(Excel下载) BOS项目笔记第4天 1.    区域批量导入功能 *Ajax不支持文件上传. *上传并且不刷新上传页面原理: Target到一个0,0,0的隐藏iframe里,造成一个没有刷新的假象 <form target="myIframe" action="ab

框架 day49 BOS项目练习3(修复window控件BUG,添加/修改/作废取派员,datagrid使用,分页查询(DetachedCriteria离线),formatter函数)

BOS项目笔记第3天 1.    修复window控件bug 把弹出窗口拖动到浏览器窗口外之后无法再拖动     将提供的outOfBounds.js文件复制到项目中     在需要修复的jsp页面引入js文件,可以阻止控件拖出窗口 <script src="${pageContext.request.contextPath }/js/easyui/outOfBounds.js" type="text/javascript"></script&

有条件分页查询功能实现

1. 制作查询按钮,点击按钮 显示快递员查询表单(窗口)2. 将查询窗口条件,绑定到数据表格上,让数据表格在发送请求时,自动携带条件查询 jquery easyui datagrid 数据表格 api先将页面 form 表单中数据,转换 {key:value, key:value} 格式查看 jquery 基于自定义方法,完成将 form 参数转换为 json 绑定 datagrid 上查询条件和分页查询参数 一起发送给服务器端3. 修改 CourierAction 的 pageQuery 方法

数据库SQL Server2012笔记(四)——多表查询、子查询、分页查询、用查询结果创建新表和外连接

1.多表查询 1)笛卡尔集: select  *  from  表名1,表名2 select  *  from  表名1,表名2  where   表名1.字段名=表名2.字段名 注: 若有两张表有相同名字的字段,则使用时需带表名(别名). order  by  置于where 条件之后. 2)自连接:同一张表的连接查询,将一张表视为两张表或多张表. eg:显示公司每个员工名字和他的上级的名字.将emp表看做两张表worker和boss select  worker.ename  雇员,boss

主流数据库分页查询介绍

1 背景概述 由于在项目中需要在页面上显示数量非常多的数据, 在进行数据库查询时首先会把所有的数据都查询出来,然后在进行显示,这时候分页查询的操作就必不可少了,本文介绍Mysql.Oracle.sql Server 三种数据库进行分页查询的用法. 2 预期读者 数通畅联内部员工 广大计算机爱好者 3 名词解释 分页查询 就是将将过多的结果在有限的界面上分多页来显示,一般将分页查询分为两类:逻辑分页.物理分页.    逻辑分页是在用户第一次访问时,将数据库的所有记录全部查询出来,添加到一个大集合中