您的位置:首页 > 其它

Hibernate的检索方式(1)

2016-03-30 10:16 211 查看

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

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

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

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

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

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

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

 

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

 

Hql查询

[b](1)条件查询[/b]

Query query = session.createQuery("from Customer o where o.name='Tom'");
List<Customer> list = query.list();//list()方法返回0到多条记录
[b](2)排序(使用与sql)[/b]
Query query = session.createQuery("from Customer c order by c.id desc
4000
");
List<Customer> list = query.list();
[b](3)别名查询:[/b]
通过HQL检索一个类的实例时,如果查询语句的其他地方需要引用它,
应该为这个类指定一个别名
from Customer as  c   where   c.name=:custname

as 可省略
[b](4)多态查询:[/b]
//查询出所有的实体(当前类和所有子类的实例)
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();
 

[b](5)分页:[/b]
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();  
[b](6)惟一结果集[/b]
Query query = session.createQuery("from Customer c order by c.id");
query.setMaxResults(1);//做多返回几条记录
Customer
c = (Customer)query.uniqueResult();//返回0到1条数据

 

[b](7)参数绑定[/b]
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();
 

 

[b](8)在映射文件中定义命名查询语句[/b]
<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();
 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  面向对象 语言 hql