hib的检索方式
1'导航对象图检索方式。通过已经加载的对象,调用.iterator()方法可以得到order对象
如果是首次执行此方法,hib会从数据库加载关联的order对象,否则就从缓存中得到。
2'oid检索方式。通过session的get,load方法知道了oid的情况下可以使用
3'hql检索方式。使用面向对象的hql查询语句session的find方法利用hql来查询
4'qbc检索方式。利用qbcapi来检索它是封装了基于字符串的查询语句
5'本地的sql检索方式。使用本地数据库的sql查询语句hib会负责把检索到的jdbc结果集映射为持久化对象图。
五种检索方式的使用场合和特点:
hql : 是面向对象的查询语言,同sql有些相似是hib中最常用的方式。
查询设定各种查询条件。
支持投影查询,检索出对象的部分属性。
支持分页查询,允许使用having和group by
提供内制的聚集函数,sum(),min(),max()
能调用用户的自定义sql
支持子查询,嵌入式查询
支持动态绑定参数
建议使用query接口替换session的find方法。
query q = session.createquery("from customer as c where c.name = :customername" + "and c.age = :customerage");
query.setstring ("customername" , "tom");
query.setinteger("customerage" , "21");
list result = query.list();
qbc : qbcapi提供了另一种方式,主要是criteria接口、criterion接口和expression类
criteria criteria = session.createcriteria(customer.class);
criterion criterion1 = expression.like("name","t%");
criterion criterion2 = expression.eq("age",new integer(21));
critera = criteria.add(criterion1) ;
critera = criteria.add(criterion2) ;
list result = criteria.list();
或是: list result = session.createcriteria(customer.class).add(expression.eq("this.name","tom")).list();
sql : 采用hql和qbc检索时,hib生成sql语句适用所有数据库。
query query = session.createsqlquery("select {c.*} from customers c where c.name like : customername " + "and c.age = :customerage","c",customer.calss);
query.setstring("customername","tom");
query.setinteger("customerage","21");
list result = query.list();
/////////////多态查询
hql :session.createquery("from employee");
qbc :session.createcriteria(employee.class);
hql : session.createquery("from hourlyemployee");
qbc : session.createcriteria(hourlyemployee.class);
下面的hql查询语句将检索出所有的持久化对象:
from java.lang.object ;
from java.io.serializable ;
////////////查询的排序
1'查询结果按照客户姓名升序排列:
hql :
query query = session.createquery ("from customer c order by c.name");
qbc :
criteria criteria = session.createcriteria(customer.class);
criteria.addorder(order.asc("name"));
hql :
query query = session.createquery ("from customer c order by c.name asc , c.age desc");
qbc :
criteria criteria = session.createcriteria(customer.class);
criteria.addorder(order.asc ("name"));
criteria.addorder(order.desc("age"));
import net.sf.hibernate.pression.order
import mypack.order
...........
criteria criteria = session.createcritria (mypack.order.class);
criteria.addorder(net.sf.hibernate.order.asc("name"));
///////////hql语句的参数绑定query接口提供了绑定各种hib映射类型的方法。
setbinary()
setstring()
setboolean()
setbyte()
setcalendar()
setcharacter()
setdate()
setdouble()
settext()
settime()
settimestamp()
setentity()//把参数与一个持久化类的事例绑定lsit result = session.createquery("from order o where o.customer = :customer").setentity("customer" , customer).list ;
setparameter()//绑定任意类型的参数
setproperties()//把命名参数与一个对象的属性值绑定 query query = session.createquery("from customer c where c.name =: name " + "and c.age =:age" );
query.setproperties(customer);
闽公网安备 35060202000074号