Criteria Query通过面向对象化的设计,将数据查询条件封装为一个对象。简单来讲,Criteria Query可以看作是传统SQL的对象化表示,如:

Java代码

Criteria criteria = session.createCriteria(User.class);

criteria.add(Expression.eq("name","Erica"));

criteria.add(Expression.eq("sex",new Integer(1)));

Criteria 查询表达式

Criteria 本身只是一个查询容器,具体的查询条件需要通过Criteria.add方法添加到Criteria实例中。 如前例所示,Expression 对象具体描述了查询条件。针对SQL 语法,Expression提供了对应的查询限定机制,包括:

Java代码

Expression.eq 对应SQL“field = value”表达式。 如Expression.eq("name","Erica")

Expression.allEq 参数为一个Map对象,其中包含了多个属性-值对应关系。相当于多个Expression.eq关系的叠加。

Expression.gt 对应SQL中的 “field > value ” 表达式

Expression.ge 对应SQL中的 “field >= value” 表达式

Expression.lt 对应SQL中的 “field < value” 表达式

Expression.le 对应SQL中的 “field <= value” 表达式

Expression.between 对应SQL中的 “between” 表达式

如下面的表达式表示年龄(age)位于13到50区间内。

Java代码

Expression.between("age",new Integer(13),new Integer(50));

表达式

Java代码

Expression.in 对应SQL中的 ”field in …” 表达式

Expression.eqProperty 用于比较两个属性之间的值,对应SQL中的“field = field”。 如:

Expression.eqProperty( "TUser.groupID", "TGroup.id" );

Expression.gtProperty 用于比较两个属性之间的值,对应SQL中的“field > field”。

Expression.geProperty 用于比较两个属性之间的值,对应SQL中的“field >= field”。

Expression.ltProperty 用于比较两个属性之间的值,对应SQL中的“field < field”。

Expression.leProperty 用于比较两个属性之间的值,对应SQL中的“field <= field”。

Expression.and and关系组合。 如:

Expression.and( Expression.eq("name","Erica"), Expression.eq( "sex", new Integer(1) ) );

Expression.or or关系组合。 如:

Expression.or( Expression.eq("name","Erica"), Expression.eq("name","Emma") );

Expression.sql 作为补充,本方法提供了原生SQL语法的支持。我们可以通过这个方法直接通过SQL语句限定查询条件。 下面的代码返回所有名称以“Erica”起始的记录:

Java代码

Expression.sql( “lower({alias}.name) like lower(?)”, "Erica%", Hibernate.STRING );

Expression.sql( “lower({alias}.name) like lower(?)”, "Erica%", Hibernate.STRING );

其中的“{alias}”将由Hibernate在运行期使用当前关联的POJO别名替换。 注意Expression 各方法中的属性名参数(如Express.eq中的第一个参数),这里 所谓属性名是POJO中对应实际库表字段的属性名(大小写敏感),而非库表中的实际字段名称。

Criteria 高级特性

限定返回的记录范围

通过criteria. setFirstResult/setMaxResults 方法可以限制一次查询返回的记录范围:

Java代码

Criteria   criteria = session.createCriteria(TUser.class);

//限定查询返回检索结果中,从第一百条结果开始的20条记录

criteria.setFirstResult(100);

criteria.setMaxResults(20);

对查询结果进行排序

//查询所有groupId=2的记录

//并分别按照姓名(顺序)和groupId(逆序)排序

Criteria  criteria = session.createCriteria(TUser.class);

criteria.add(Expression.eq("groupId",new Integer(2)));

criteria.addOrder(Order.asc("name"));

criteria.addOrder(Order.desc("groupId"));

Criteria criteria = session.createCriteria(TUser.class);

//限定查询返回检索结果中,从第一百条结果开始的20条记录

criteria.setFirstResult(100);

criteria.setMaxResults(20);

对查询结果进行排序

//查询所有groupId=2的记录

//并分别按照姓名(顺序)和groupId(逆序)排序

Criteria criteria = session.createCriteria(TUser.class);

criteria.add(Expression.eq("groupId",new Integer(2)));

criteria.addOrder(Order.asc("name"));

criteria.addOrder(Order.desc("groupId"));

分享到:

2009-06-01 09:20

浏览 7961

评论

2 楼

senhui19

2010-11-12

嗯,写的不错,收藏起来方便以后查看,呵呵~~

1 楼

hanz188

2010-07-30

楼主总结的真好,我看完之后基本上就了解了criteria的概念和用法了。如果页面能够重新排下版就更好了,另外,最后一段代码重复了,能不能删除一个。

java criteria and_criteria用法相关推荐

  1. java criteria and_Criteria 笔记

    来自:徽骆驼 Criteria Query 可以看作传统sql的对象化表示 Criteria 可以由session创建 Criteria ct= session.createCriteria(TUse ...

  2. 四种Java线程池用法解析

    四种Java线程池用法解析 本文为大家分析四种Java线程池用法,供大家参考,具体内容如下 http://www.jb51.net/article/81843.htm 1.new Thread的弊端 ...

  3. 2020-12-17 【 java优先队列的用法】

    java优先队列的用法 peek是top() 只取最上面的元素 poll是pop() 弹出 add是添加 push 类的比较器,相对于仿函数 struct cmp{ bool operator ()( ...

  4. java中import用法

    java中import用法 单类型导入(single-type-import),例如import java.io.File; 按需类型导入(type-import-on-demand),例如 impo ...

  5. java.nio.ByteBuffer用法小结

    转载自  java.nio.ByteBuffer用法小结 在NIO中,数据的读写操作始终是与缓冲区相关联的.读取时信道(SocketChannel)将数据读入缓冲区,写入时首先要将发送的数据按顺序填入 ...

  6. Java Spring IOC用法

    Java Spring IOC用法 Spring IoC 转载于:http://www.cnblogs.com/flowwind/p/4772375.html 在前两篇文章中,我们讲了java web ...

  7. 设计模式--模板方法模式--Java实现-- java访问控制关键字用法

    1.什么是模板方法 2.具体实现步骤 5.优缺点 6适用场景 java访问控制关键字用法 – protected的解释 (1)私有的:用关键字private修饰,只有本类可见. (2)默认的:不用访问 ...

  8. Java List相关用法

    Java List相关用法 1. subList 2. Queue接口 3. Deque接口 4. List常用算法 5. Collections.sort方法 6. Comparator接口 1. ...

  9. 设计模式 - 观察者模式(Observer Pattern) Java内置 用法

    观察者模式(Observer Pattern) Java内置 用法 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26601659 ...

最新文章

  1. 关于Javascript闭包的理解
  2. php页面增加自选项,php - 添加自定义设置选项卡,Woocommerce的设置客户列表内容 - SO中文参考 - www.soinside.com...
  3. CodeForces - 1325F Ehabs Last Theorem(dfs树找最大环)
  4. java jar 环境变量_java-jar jar包带环境变量(参数)启动
  5. 深入浅出InfoPath——动态获取InfoPath中的命名空间
  6. linux检查nginx 状态,Nginx配置检测服务状态的实现方法,
  7. 《并行计算的编程模型》一3.5 远程内存访问:put和get
  8. Python基础篇:用Python简简单单写个星空大战,可不能用来摸鱼啊~
  9. 茶 —— 一片树叶的故事(茶叶的品类)
  10. 2018第17周总结
  11. 无线网卡插到服务器 没有反应,无线网卡插上没反应怎么办
  12. iOS 导航栏透明度 监听导航栏返回进度
  13. oracle+soacs,第 3 章 使用 C++ 编译器选项
  14. 关于USB3.0的U盘正确用法
  15. android华为获取相册,解决华为手机获取相册图片路径为null
  16. register解析
  17. 一拍是多少秒 计算机制音乐,bpm换算节拍(bpm多少算快歌)
  18. Mac上如何提取图片上的文字?
  19. 亚伟计算机速录测试软件,亚伟中文速录机软件
  20. --->MYSQL<---

热门文章

  1. 关于JVM和JIT的一点点
  2. 英语中的开音节和闭音节
  3. SublimeText如何让代码的关键字高亮显示
  4. 人类一败涂地邀请好友一直显示连接服务器,人类一败涂地怎么邀请好友 局域网创建房间方法图文教学-游侠网...
  5. python判断奇偶数字符串的拼接_Python字符串拼接方法总结
  6. python判断相同,Python判断两个文件是否相同与两个文本进行相同项筛选的方法
  7. python使用欧氏距离knn_python运用sklearn实现KNN分类算法
  8. python回声程序 一行代码_python实现的比较完成的带声音的摩斯码翻译程序的代码...
  9. 利用C/C++实现较完整贪吃蛇游戏
  10. Python3只出现一次数字