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查询
(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();//返回0到1条数据
(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();