Hibernate-Criteria 模糊查询
来源:互联网 发布:西蒙斯夏季联盟数据 编辑:程序博客网 时间:2024/04/19 21:53
Criteria Query通过面向对象化的设计,将数据查询条件封装为一个对象。简单来
讲,Criteria Query可以看作是传统SQL的对象化表示,如:
Criteria criteria = session.createCriteria(User.class);
criteria.add(Expression.eq("name","Erica"));
criteria.add(Expression.eq("sex",new Integer(1)));
这里的criteria 实例实际上是SQL “Select * from t_user where
name=’Erica’ and sex=<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="1" unitname="”"></chmetcnv>1”的封装(我们可以打开Hibernate 的show_sql 选项,
以观察Hibernate在运行期生成的SQL语句)。
Hibernate 在运行期会根据Criteria 中指定的查询条件(也就是上面代码中通过
criteria.add方法添加的查询表达式)生成相应的SQL语句。
这种方式的特点是比较符合Java 程序员的编码习惯,并且具备清晰的可读性。正因
为此,不少ORM实现中都提供了类似的实现机制(如Apache OJB)。
对于Hibernate的初学者,特别是对SQL了解有限的程序员而言,Criteria Query
无疑是上手的极佳途径,相对HQL,Criteria Query提供了更易于理解的查询手段,借
助IDE的Coding Assist机制,Criteria的使用几乎不用太多的学习。
Criteria 查询表达式
Criteria 本身只是一个查询容器,具体的查询条件需要通过Criteria.add
方法添加到Criteria实例中。
如前例所示,Expression 对象具体描述了查询条件。针对SQL 语法,
Expression提供了对应的查询限定机制,包括:
方法 描述
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区间内。
Expression.between("age",new
Integer(13),new Integer(50));
表达式
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”起始的记录:
Expression.sql(
“lower({alias}.name) like lower(?)”,
"Erica%",
Hibernate.STRING
);
其中的“{alias}”将由Hibernate在运行期使
用当前关联的POJO别名替换。
注意Expression 各方法中的属性名参数(如Express.eq中的第一个参数),这里
所谓属性名是POJO中对应实际库表字段的属性名(大小写敏感),而非库表中的实
际字段名称。
Criteria 高级特性
限定返回的记录范围
通过criteria. setFirstResult/setMaxResults 方法可以限制一次查询返回
的记录范围:
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作为一种对象化的查询封装模式,不过由于Hibernate在实现过程中将精力
更加集中在HQL查询语言上,因此Criteria的功能实现还没做到尽善尽美(这点上,OJB
的Criteria 实现倒是值得借鉴),因此,在实际开发中,建议还是采用Hibernate 官
方推荐的查询封装模式:HQL。
- Hibernate-Criteria 模糊查询
- Hibernate-Criteria 模糊查询
- Hibernate-Criteria 模糊查询
- Hibernate-Criteria Query模糊查询
- hibernate模糊查询criteria封装参数
- Hibernate Criteria 关联查询
- hibernate 动态查询 Criteria
- Hibernate 中的 Criteria 查询。
- Hibernate---Criteria 查询
- Hibernate Criteria 查询 详细参数
- hibernate --Criteria条件查询
- hibernate中criteria查询
- hibernate criteria查询
- Hibernate之 Criteria查询
- hibernate Example、Criteria 查询
- Hibernate Criteria 关联查询
- Hibernate Criteria查询
- Hibernate的Criteria查询
- 关于换肤、子类化,征求解决方案
- word文档错误诊断
- ArcEngine 反距离权重插值法计算简单地面高程
- 进程间通信(IPC) 实例
- Windows和Linux上端口使用情况查看
- Hibernate-Criteria 模糊查询
- hibernate3的缓存管理
- 类与组件类
- Shell Folder重新定向
- UI 特效
- 网站注入解决方案
- 部分技术代码
- 头文件案例分析
- 无线模块的设计方案比较