+++在映射文件中定義命名查詢
<class .. >
</class>
<query name="findCustomersByName"><![CDATA[
from Customer c where c.name like :name
]]></query>
語句:Query q=session.getNamedQuery("findCustomersByName");
q.setString("name",name);
List result=query.list();
++++ HQL Vs QBC 檢索方式
比較運算
1 . 檢索年齡大于18的Customer
HQL session.createQuery("from Customer cwhere c.age>18");
QBC Criteria criteria=session.createCriteria(Customer.class);
criteria.add(Expression.gt("age",18));
2 . 檢索年齡不等于 18的
HQL session.createQuery("from Customer c where c.age<>18")
QBC Criteria criteria =session.createCriteria(Customer.class);
criteria.add(Expression.not(Expression.eq("age",new Integer(18))));
3. 檢索姓名為空的Customer對象
HQL session.createQuery("from Customer c where c.name is null");
QBC Criteria criteria =session.createCriteria(Customer.class);
criteria.add(Expression.isNull("name"));
4. 檢索不屬于任何客戶的訂單
HQL session.createQuery("from Order o where o.customer is null");
QBC Criteria criteria =session.createCriteria(Order.class);
criteria.add(Expression.isNull("customer"));
5. HQL Query q=session.createQuery("from Customer c where lower(c.name)='tom'");
Query q=session.createQuery("from Customer c where upper(c.name)='TOM'");
QBC Criteria criteria =session.createCriteria(Customer.class);
criteria.add(Expression.eq("name","tom").ignoreCase());
范圍運算
1. 檢查姓名為 Tom,Mike 或者Jack 的 Customer對象
HQL session.createQuery("from Customer c where c.name in('Tom','Mike','Jack')");
QBC Criteria criteria=session.createCriteria(Customer.class);
String names[]={"Tom","Mike","Jack"};
criteria.add(Expression.in("name",names));
2. 檢查年齡在 18 到 25之間的Customer對象
HQL session.createQuery("from Customer c where c.age between 18 and 25");
QBC Criteria criteria=session.createCriteria(Customer.class);
criteria.add(Expression.between("age",new Integer(18),newInteger(25)))
3. 檢索年齡不在 18到 25之間的Customer對象;
HQL session.createQuery("from Customer c where c.age not between 18 and 25");
QBC Criteria criteria=session.createCriteria(Customer.class);
criteria.add(Expression.not(Expression.between("age",new Integer(18),newInteger(25))))
字符串模式匹配
1. 檢索姓名以 "T"開頭的Customer對象
HQL session.createQuery("from Customer cwhere c.name like 'T%'");
QBC Criteria criteria=session.createCriteria(Customer.class);
criteria.add(Expression.like("name","T%"));
%表示 任意個字符
_表示 一個字符
Or
criteria.add(Expression.like("name","T",MatchMode.START));
MatchMode 類中有:
START