Hibernate的检索方式(1)

1Hibernate 提供了以下几种检索对象的方式

1HQL 检索方式: 使用面向对象的 HQL 查询语言

l HQL(Hibernate Query Language) 是面向对象的查询语言

l HQL语句的检索方式与SQL语句的区别

* HQL是面向对象和对象中的属性

* SQL是面向过程(面向数据库表和表中的列)

2QBC 检索方式: 使用 QBC(Query By Criteria) API 来检索对象.

 

3SQL 检索方式: 使用本地数据库的 SQL 查询语句

 

Hql查询
1)条件查询

Query query = session.createQuery("from Customer o where o.name='Tom'");

List<Customer> list = query.list();//list()方法返回0到多条记录

2)排序(使用与sql

Query query = session.createQuery("from Customer c order by c.id desc");

List<Customer> list = query.list();

3)别名查询:

通过HQL检索一个类的实例时,如果查询语句的其他地方需要引用它,

应该为这个类指定一个别名

from Customer as  c   where   c.name=:custname

as 可省略

4)多态查询:

//查询出所有的实体(当前类和所有子类的实例)

Query query = session.createQuery(“from Customer”);

query.list();

 

//检索出所有实现serializable接口的实例

Query query = session.createQuery(“ from java.io.Serializable”)

query.list();

 

 

//检索出所有的持久化对象

Query query = session.createQuery(“ from java.lang.Object”)

query.list();

 

5)分页:

l 分页查询:

• setFirstResult(int firstResult): 设定从哪一个对象开始检索, 参数 firstResult 表示这个对象在查询结果中的索引位置, 索引位置的起始值为 0. 默认情况下, Query 从查询结果中的第一个对象开始检索

• setMaxResult(int maxResults): 设定一次最多检索出的对象的数目. 在默认情况下, Query Criteria 接口检索出查询结果中所有的对象

 

Query query = session.createQuery("from Order o order by o.id desc");

//第一页

//query.setFirstResult(0);//表示从第一条开始检索,0表示1

//query.setMaxResults(10);//表示当前页最多显示多少条记录

//第二页

//query.setFirstResult(10);//表示从第一条开始检索,0表示1

//query.setMaxResults(10);//表示当前页最多显示多少条记录

//第三页

query.setFirstResult(20);//表示从第一条开始检索,0表示1

query.setMaxResults(10);//表示当前页最多显示多少条记录

List<Order> list = query.list();

tx.commit();

s.close();  

6)惟一结果集

Query query = session.createQuery("from Customer c order by c.id");

query.setMaxResults(1);//做多返回几条记录

Customer c = (Customer)query.uniqueResult();//返回01条数据

 

7)参数绑定

hql 查询:使用setString/setInteger

方式一:指定名称参数绑定

Query query = session.createQuery("from Customer c where " +

                                  " c.name=:custname and c.age=:custage");

//第一个参数代表名字,第二个参数代表值

query.setString("custname", "Tom");

query.setInteger("custage", 21);

List list = query.list();

 

方式二:指定参数的位置绑定

Query query = session.createQuery("from Customer c

                       where c.name=? and c.age=?");

query.setString(0,"Tom");

query.setInteger(1, 21);

query.list();

 

 

Hql查询:使用setParameter

方式一:指定名称参数绑定

Query query = session.createQuery("from Customer c where c.name=:customerName and c.age=:customerAge");

query.setParameter("custermName", "Tom");

query.setParameter("customerAge", 21); 

List<Customer> list = query.list();

 

方式二:指定参数的位置绑定

Query query = s.createQuery("from Customer c where c.name=? and c.age=?");

query.setParameter(0, "Tom");

query.setParameter(1, 21);

List<Customer> list = query.list();

 

 

8)在映射文件中定义命名查询语句

<class>

   .......

</class>

<query name="findCustomersByName">

     <![CDATA[from Customer c where c.name like ?]]>

</query>

------------------------------------------------------------------

Query query = session.getNamedQuery(“findCustomersByName”);

query.setString(0,”%T%”);

query.list();

 

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值