hibernate提供了两中查询方式,Criteria,HQL以及SQL。
Criteria以面向对象的方式进行数据库查询操作。
通过Criteria criteria=session.createCriteria(Userbean.class);来获取实例。
Criteria生命周期与Session相同,一旦Session被销毁,那么Criteria就得重新构造。
DetachedCriteria是Criteria一种新的实现,可以独立于Session存在。
在需要查询的时候使用如下方式获得实例:
DetachedCriteria detachedCriteria=DetachedCriteria.forClass(Userbean.class);
Criteria criteria=detachedCriteria.getExecutableCriteria(session);
Criteria是一个查询容器,通过criteria.add方法为其添加查询条件。
比如要添加id=2这个查询条件:criteria.add(Expression.eq("id",2L));
更多api如下:
记录排序criteria.addOrder
分组与统计criteria.setProjection
HQL
一种更加灵活的查询方式,使用和SQL类似。
String hql="from Userbean";
Query query=session.createQuery(hql);
List<Userbean> list=query.list();
上面语句会查询Userbean以及其子类多映射表的所有数据。
查询属性,如果需要查询Userbean中的某个或几个属性:
String hql="select user.loginName from Userbean user";
Query query=session.createQuery(hql);
List<String> list=query.list();
for (String loginName : list) {
System.out.println(loginName);
}
hibernate3中HQL还可以用来执行更新或删除。
String hql="update Userbean set loginName=test where id =1";
如果不希望代码与HQL耦合,可以使用配置HQL的方式。
在相应的.hbm.xml中配置query
<query name="queryById">
from Userbean user where user.id=:id
</query>
:id为站位。
配置好后通过
Query query=session.getNamedQuery("queryById");
query.setParameter("id",2L);
使用。
SQL
Hibernate也支持使用原生SQL进行操作,同样这种方式也可以使用配置SQL的方式避免代码与SQL耦合。