随笔 - 0, 文章 - 75, 评论 - 0, 引用 - 0
数据加载中……

Criteria查询

用到特定于数据库的SQL 语句,程序本身会依赖于特定的数据库
不了解SQL 语句,恐怕对使用HQL带来困难


Hibernate提供的Criteria查询
帮助我们解决了这种问题


Criteria 查询采用面向对象方式封装查询条件,又称为对象查询
对SQL
语句进行封装
采用对象的方式来组合各种查询条件
由Hibernate 自动产生SQL 查询语句
Criteria由Hibernate
Session进行创建



SessionFactory
sessionFactory
= new Configuration().configure()


 
.
buildSessionFactory();


Session
session
=
sessionFactory.openSession();


Criteria
criteria
=
session.createCriteria(User.class);
//查询该实体中所有数据


List
result
=
criteria.list();


Iterator
it
=
result.iterator();


while
(
it.hasNext())
{


User user
=
(User)
it.next();


System.out.println("用户名:"
+
user.getName());


}


session.close();


sessionFactory.close();


--------------------------------------------------------------


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


criteria.add(Restrictions.eq("name",
"bob")); //使用add()添加查询条件



//查询条件:name='admin'


List
result
=
criteria.list();


Iterator
it
=
result.iterator();


//...

















































方法




Restrictions.eq()


对应SQL的等于(’=’


Restrictions.allEq()


使用Map,使用key/value进行多个相等的值的比对


Restrictions.gt()


对应SQL的大于
(‘>’)


Restrictions.ge()


对应SQL的大于等于
(‘>=’)


Restrictions.lt()


对应SQL的小于
(‘<’)


Restrictions.le()


对应SQL的小于等于
(‘<=’)


Restrictions.between()


对应SQLbetween子句


Restrictions.like()


对应SQLlike子句


Restrictions.in()


对应SQLin子句


Restrictions.and()


对应SQLand


Restrictions.or()


对应SQLor


Restrictions.not()


对应SQLnot



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


criteria.add(Restrictions.or(


Restrictions.eq("price",
new Double(2300)),


Restrictions.like("title",
"%
地铁%")));



如果属性条件很多,使用Restrictions
也不方便


Hibernate提供Example
的create()方法来建立Example 实例,Example 实现了Criteria 接口


House
house
=
new House()
;


house.setPrice(new
Double(2000))
;
//查询条件,添加到house对象中


house.setFloorage(new
Integer(40))
;


SessionFactory
sessionFactory
=
new Configuration().configure().
buildSessionFactory();


Session
session
=
sessionFactory.openSession();


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


criteria.add(Example.create(house));
//通过Example
create()方法来建立Example
实例作为查询条件



Hibernate
在自动生成SQL
语句时将自动过滤掉对象的空属性,根据有非空属性值的属性生成查询条件



Criteria
查询不仅能组合出SQL中where子句的功能,还可以组合出排序查询功能
使用org.hibernate.criterion.Order对结果进行排序
排序的方法为:
asc()
desc()



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


criteria.addOrder(Order.desc("price"));
//加入Order
条件
以价格降序的方式排列




Criteria
的setMaxResults()方法可以限定查询返回数据的行数


Criteria
的setFirstResult()设定查询返回结果的第一行数据的位置


结合以上Criteria的两个方法即可实现简单分页


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


criteria.setFirstResult(3);
//设定查询返回结果的第一行数据的位置


//从第4条数据开始读


criteria.setMaxResults(2);
//限定查询返回数据的行数


//取2条


List
results =
criteria.list();




总结
如何使用Criteria
查询?
如何使用Example查询已有实体对象的类似对象?
如何使用Order对Criteria查询结果进行排序?
如何使用Criteria限定查询返回的数据行数?



补充:


Example不能以主键字段查询,-->
全返回数据


也不会使用like查询
(eq.()方法)

posted on 2012-04-22 15:55 hantai 阅读(512) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: