1.HQL检索方式
HQL查询语句是面向对象的,HQL查询语句中的主体是域模型中的类及类的属性。
步骤:
(1)通过Session的createQuery()方法创建一个Query对象,它包含一个HQL查询语句;
(2)动态绑定参数;
(3)调用Query的list()方法执行查询语句。
Query query = session.createQuery("from Customer as c where c.name=:customerName");
query.setSting("customerName", "Tom");
List result = query.list();
2.QBC检索方式
步骤:
(1)通过Session的createCriteria()方法创建一个Criteria对象;
(2)设定查询条件;
(3)调用Criteria的list()方法执行查询语句。
Criteria criteria = session.createCriteria(Customer.class);
Criterion criterion1 = Restrictions.like("name", "T%");
Criterion criterion2 = Restrictions.eq("age", new Integer(21));
criteria = criteria.add(criterion1);
criteria = criteria.add(criterion2);
List result = criteria.list();
3.本地SQL检索方式
Query query = session.createSQLQuery("select * from CUSTOMERS where c.NAME=:customerName");
query.setSting("customerName", "Tom");
List result = query.list();
4.分页查询
Query和Criteria接口都提供了用于分页获取结果的方法:
setFirstResult(int firstResult):设定从哪一个对象开始检索,索引起始值为0;
setMaxResult(int maxResults):设定一次最多检索出的对象数目。
5.检索单个对象
Query和Criteria接口都提供了用于执行查询语句并返回结果的方法:
list()方法:返回一个List()类型的查询结果;
uniqueResult()方法:返回单个对象。
只希望检索出一个对象,可以先调用setMaxResult(1)方法,然后调用uniqueResult()方法:
Customer customer = (Customer)session.createQuery("from customer c order by c.name asc") .setMaxResults(1).uniqueResult();
若明确知道查询结果只包含一个对象,可以不调用setMaxResult(1)方法,否则必须先调用。
6.按主键逐个处理查询结果
List customerL = session.createQuery("from Customer c where c.age>10").list();
Iterator customerI = session.createQuery("from Customer c where c.age>10").iterate();
list()方法执行以下select语句:
select * from CUSTOMERS where AGE>10;
iterate()方法执行以下select语句:
select ID from CUSTOMERS where AGE>10;
7.HQL查询中绑定参数
(1)按参数名绑定
Query query = session.createQuery("from Customer as c where c.name=:customerName");
query.setSting("customerName", "Tom");
(2)按参数位置绑定
Query query = session.createQuery("from Customer as c where c.name=?");
query.setSting(0, "Tom");
(3)特殊参数绑定
setEntity()方法:绑定持久化类的实例
session.createQuery("from Order o where o.customer=:customer").setEntity("customer",customer);
setParamenter()方法:绑定任意类型参数
session.createQuery("from Order o where o.customer=:customer") .setParamenter("customer",customer,Hibernate.entity(Customer.class));
setProperties()方法:把命名参数与一个对象的属性值绑定
Customer customer = new Customer();
customer.setName("Tom");
session.createQuery("from Customer as c where c.name=:name").setProperties(customer);
8.设置查询附属事项
setFlushMode():设置清理缓存模式,FlushMode.AUTO、FlushMode.COMMIT、FlushMode.NEVER。
setCacheMode():设置Session与第二级缓存的交互模式,CacheMode.NORMAL、CacheMode.IGNORAL、CacheMode.GET、CacheMode.PUT、CacheMode.REFRESH。
setTimeOut():设置执行查询数据库的超时时间。
setFetchSize():为JDBC驱动程序设置批量抓取的数目。
setLockMode():设置锁定模式。
setComment():为SQL日志设置注解。
Query接口还有setReadOnly()方法设置查询结果只读。