Hibernate比较运算符效果等同于sql中的比较运算符。
HQL语句直接跟sql写法一致,不同的是QBC语句将运算符转换成用代码控制,QBC不支持数学运算,代码没法控制。
一,HQL语句使用比较运算符
一切你能在sql中写的比较运算符,在HQL语句中都能写。
一个检索name不为空的实例:
package com.lanhuigu.hibernate.test;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import com.lanhuigu.hibernate.entity.Customer;
public class TestHQL {
public static void main(String[] args) throws Exception{
Configuration cfg = new Configuration().configure();
SessionFactory sessionFactory = cfg.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction tr = session.beginTransaction();
//1.创建Query对象,同时使用比较运算符,直接在sql中完成编写,无需代码控制
Query query = session.createQuery("from Customer where name is not null order by name desc");//降序,desc不可以去掉,去掉就升序了
//2.参数
//3.分页
query.setFirstResult(0);//从什么位置开始,默认为0
query.setMaxResults(1);//最多检出的条数
//4.执行SQL
List list = query.list();
//5.输出结果
for (int i = 0;i<list.size();i++) {
Customer customer = (Customer) list.get(i);
System.out.println(customer.getName());
}
//6.事务提交
tr.commit();
//7.关闭session
session.close();
}
}
二,QBC语句使用比较运算符
在sql中使用的比较运算符需要借助Expression类实现转换,特别注意,QBC不能进行数学运算,假如能进行运算,做一个1+1可能都得设计一堆方法,没有必要。
以下为QBC语句检索name不为空的实例,通过Expression的isNotNull()指定属性不为空的字段:
package com.lanhuigu.hibernate.test;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Expression;
import org.hibernate.criterion.Order;
import com.lanhuigu.hibernate.entity.Customer;
public class TestQBC {
public static void main(String[] args) throws Exception{
Configuration cfg = new Configuration().configure();
SessionFactory sessionFactory = cfg.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction tr = session.beginTransaction();
//1.创建Criteria对象
Criteria criteria = session.createCriteria(Customer.class);
//2.Expression静态方法绑定查询条件,创建的每个Criterion实例就是一个条件
Criterion criterion = Expression.isNotNull("name");//QBC运用比较运算符,通过代码控制
criteria.add(criterion);
//3.排序
//criteria.addOrder(Order.asc("name"));//升序
criteria.addOrder(Order.desc("name"));//降序
//4.分页
criteria.setFirstResult(0);//从什么位置开始,默认为0
criteria.setMaxResults(1);//最多检出的条数
//5.执行SQL
List list = criteria.list();
//6.输出结果
for (int i = 0;i<list.size();i++) {
Customer customer = (Customer) list.get(i);
System.out.println(customer.getName());
}
//7.事务提交
tr.commit();
//8.关闭session
session.close();
}
}
对于QBC使用比较运算符依靠Expression下可用的方法,以下为对Expression方法截图,圈了些常用的: