Hibernate的检索方式

本文详细介绍了HQL检索方式、QBC检索方式、本地SQL检索方式,并深入探讨了分页查询、单个对象检索、按主键逐个处理查询结果及参数绑定等关键点。同时,阐述了如何设置查询附属事项,如缓存模式、时间限制等,为开发者提供全面的检索技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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()方法设置查询结果只读。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值