[业务]条件类Criteria的用法

更新时间:2023-07-04 14:21:05 阅读: 评论:0

复合查询主要是处理,具有关联关系的两个实体怎样进行关联查询,比如Ur 实体对象与Addres实体对象具有一对多的关联关系,我们可以如下构造符合查询:
Criteria ateCriteria(Ur.class);
Criteria ateCriteria(“address”);(1)
addcriteria.add(Express.like(“address”,”%tianjin%”));
List list=criteria.list();春天钓鱼
for(int i=0;i
Ur ur=((i);
System.out.print Name()+”\n”);
Set Address();
Iterator it=address.iterator();
while(it.hasNext(){
蔬菜的简笔画Address address=(();
System.out.Address()+”\n”);
}
}
当执行到了(1)处时,表明要针对Ur对象的address属性添加新的查询条件,因此当执行criteria.list()时,Hibernate会生成类似如下的SQL语句:
excel学习全套教程
Select * from ur inner join address on ur.id=address.id where address.address like …%shanghai%‟;
金鱼缸法则正如我们所见,我们可以通过向Criteria中添加保存关联对象的集合属性(address属性保存与Ur对象相关联的Address对象),来构造复合查询,在数据库一端是通过内连接查询来实现。
Hibernate QBC查询
小学生古诗配画
QBC查询:
自制烤地瓜
QBC查询就是通过使用Hibernate提供的Query By Criteria API来查询对象,这种API封装了SQL语句的动态拼装,对查询提供了更加面向对象的功能接口。我们看下面的示例程序:
Criteria ateCriteria(Ur.class);
criteria.add(Expression.eq(“name”,”zx”));
criteria.add(Expression.eq(“age”,new Integer(27));
List list=criteria.list();
当执行criteria.list()时会生成类似这样的SQL语句:Select * from ur where name=‟zx‟ and age=27;所以在这里我们可以看出,Criteria实际上是一个查询容器,它对查询条件表达式的添加进行了封装,具体的查询条件是通过add()方法添加的,而且具体的查询条件的表达式运算是通过Expression指定的。Hibernate在运行期会根据Criteria指定的表达式条件来添加查询条件,并且生成查询语句。这种方式非常符合Java以及所有面向对象编程语言的编程方式,所以大多数的持久层框架都提供了对这种方式查询的支持。下面我们讲解这种查询方式的各个技术细节。
1、Criteria查询表达式:
正如我们所见,Expression对查询语句的表达式进行了封装和限制,下表列出了Expression所有的方法,以及每个方法所对应的查询表达式及其限制。
注意:Expression各方法中的属性参数(各方法中的第一个参数)所指定的属性名称(如:name,x),并不是数据库表中的实际字段名称,而是实体对象中映射实际数据表字段的类属性名称。
2、示例查询:
示例查询是通过Example类来完成的,Example类实现了Criterion接口,可以用作Criteria查询条件,Example类的作用是:根据已有对象,查询属性值与之相同的其他对象。如下代码所示:
Criteria ateCriteria(Ur.class);
Ur exampleur=new Ur(“zx”);
criteria.ate(exampleur));
List list=criteria.list();
for(int i=0;i
Ur ur=((i);
System.out.Name()+”\n”);
}
上述代码中Ur exampleur=new
颜的词语
Ur(“zx”);criteria.ate(exampleur));两句相当于
criteria.add(Expression.eq(“name”,”zx”));因此会生成类似如下的SQL语句:
lect * from ur where name=‟zx‟;在上面的代码中exampleur称为示例对象。
在Hibernate中队示例查询,默认情况下会排除掉示例对象中属性值为空的属性,还可以调用ludeNone(排除空串值)/excludeZeros(排除零值),或者调用ludeProperty方法来指定排除特定属性。
示例查询主要应用于组合查询中,比如根据用户输入的查询条件动态生成最终的查询语句,通过使用示例查询,可以避免由于查询条件过多而写的大量if 判断语句。
3、复合查询:
复合查询主要是处理,具有关联关系的两个实体怎样进行关联查询,比如Ur实体对象与Addres实体对象具有一对多的关联关系,我们可以如下构造符合查询:
Criteria ateCriteria(Ur.class);
Criteria ateCriteria(“address”);(1)
粽子短信addcriteria.add(Express.like(“address”,”%tianjin%”));
List list=criteria.list();
for(int i=0;i
Ur ur=((i);
System.out.Name()+”\n”);
Set Address();
Iterator it=address.iterator();
while(it.hasNext(){
Address address=(();
System.out.Address()+”\n”);
}
}
当执行到了(1)处时,表明要针对Ur对象的address属性添加新的查询条件,因此当执行criteria.list()时,Hibernate会生成类似如下的SQL语句:
Select * from ur inner join address on ur.id=address.id where address.address like …%shanghai%‟;
正如我们所见,我们可以通过向Criteria中添加保存关联对象的集合属性(address属性保存与Ur对象相关联的Address对象),来构造复合查询,在数据库一端是通过内连接查询来实现。
4、Criteria的高级特性:
A、限定返回记录条数:
我们可以通过利用Criteria.tFirstResult/tMaxResult方法来限定返回某一次查询的记录数,如下代码:
Criteria ateCriteria(Ur.class);
criteria.tFirstResult(100);
criteria.tMaxResult(200);
通过以上代码可以设定该次查询返回ur表中的从第100条记录开始直到第200条记录结束的100条记录。
B、对查询结果进行排序:
可通过使用net.pression.Order类可以对查询结果集进行排序,如下面代码:

本文发布于:2023-07-04 14:21:05,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1067537.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:查询   对象   属性   条件   示例   实体   关联
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图