Hib的检索方式
导航对象图检索方式通过已经加载的对象调erator()方法可以得到order对象
如果是首次执行此方法Hib会从数据库加载关联的order对象否则就从缓存中得到
OID检索方式通过session的getload方法知道了OID的情况下可以使用
HQL检索方式使用面向对象的HQL查询语句session的find方法利用HQL来查询
QBC检索方式利用QBCAPI来检索它是封装了基于字符串的查询语句
本地的SQL检索方式使用本地数据库的SQL查询语句Hib会负责把检索到的JDBC结果集映射为持久化对象图
五种检索方式的使用场合和特点
HQL 是面向对象的查询语言同SQL有些相似是Hib中最常用的方式
查询设定各种查询条件
支持投影查询检索出对象的部分属性
支持分页查询允许使用having和group by
提供内制的聚集函数sum()min()max()
能调用用户的自定义SQL
支持子查询嵌入式查询
支持动态绑定参数
建议使用Query接口替换session的find方法
Query Q = sessioncreateQuery(from customer as c where cname = :customerName + and cage = :customerAge);
querysetString (customerName tom);
querysetInteger(customerAge );
list result = querylist();
QBC : QBCAPI提供了另一种方式主要是Criteria接口Criterion接口和Expression类
Criteria criteria = sessioncreateCriteria(customerclass);
Criterion criterion = Expressionlike(namet%);
Criterion criterion = Expressioneq(agenew Integer());
Critera = criteriaadd(criterion) ;
Critera = criteriaadd(criterion) ;
list result = criterialist();
或是 list result = sessioncreateCriteria(Customerclass)add(Expressioneq(thisnametom))list();
SQL : 采用HQL和QBC检索时Hib生成SQL语句适用所有数据库
Query query = sessioncreateSQLQuery(select {c*} from customers c where cname like : customername + and cage = :customerageccustomercalss);
querysetString(customernametom);
querysetInteger(customerage);
list result = querylist();
/////////////多态查询
HQL sessioncreateQuery(from employee);
QBC sessioncreateCriteria(employeeclass);
HQL : sessioncreateQuery(from hourlyEmployee);
QBC : sessioncreateCriteria(hourlyEmployeeclass);
下面的HQL查询语句将检索出所有的持久化对象
from javalangObject ;
from javaioserializable ;
////////////查询的排序
查询结果按照客户姓名升序排列
HQL
Query query = sessioncreateQuery (from customer c order by cname);
QBC
Criteria criteria = sessioncreateCriteria(customerclass);
criteriaaddOrder(orderasc(name));
HQL :
Query query = sessioncreateQuery (from customer c order by cname asc cage desc);
QBC :
Criteria criteria = sessioncreateCriteria(customerclass);
criteriaaddOrder(orderasc (name));
criteriaaddOrder(orderdesc(age));
import netsfhibernatepressionOrder
import mypackOrder
Criteria criteria = sessioncreateCritria (mypackOrderclass);
criteriaaddOrder(netsfhibernateOrderasc(name));
///////////HQL语句的参数绑定Query接口提供了绑定各种Hib映射类型的方法
setBinary()
setString()
setBoolean()
setByte()
setCalendar()
setCharacter()
setDate()
setDouble()
setText()
setTime()
setTimestamp()
setEntity()//把参数与一个持久化类的事例绑定lsit result = sessioncreateQuery(from order o where ocustomer = :customer)setEntity(customer customer)list ;
setParameter()//绑定任意类型的参数
setProperties()//把命名参数与一个对象的属性值绑定 Query query = sessioncreateQuery(from customer c where cname =: name + and cage =:age );
QuerysetProperties(customer);