java

位置:IT落伍者 >> java >> 浏览文章

Hibernate:HQL/QBC查询语言比较的用法


发布日期:2021年04月09日
 
Hibernate:HQL/QBC查询语言比较的用法

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);

上一篇:Struts 1.x中批量封装对象

下一篇:精通Eclipse V3.4,第1部分: Eclipse工作台