HQL检索方式
HQL 检索方式包括以下步骤:
- 通过 Session 的 createQuery() 方法创建一个 Query 对象, 它包括一个 HQL 查询语句. HQL 查询语句中可以包含命名参数
- 动态绑定参数
- 调用 Query 相关方法执行查询语句.
绑定参数:
- Hibernate 的参数绑定机制依赖于 JDBC API 中的 PreparedStatement 的预定义 SQL 语句功能.
HQL 的参数绑定由两种形式:
- 按参数名字绑定: 在 HQL 查询语句中定义命名参数, 命名参数以 “:” 开头.
- 按参数位置绑定: 在 HQL 查询语句中用 “?” 来定义参数位置
- 相关方法:
- setEntity(): 把参数与一个持久化类绑定
- setParameter(): 绑定任意类型的参数. 该方法的第三个参数显式指定 Hibernate 映射类型
分页查询:
setFirstResult(int firstResult): 设定从哪一个对象开始检索, 参数 firstResult 表示这个对象在查询结果中的索引位置, 索引位置的起始值为 0. 默认情况下, Query 从查询结果中的第一个对象开始检索
setMaxResults(int maxResults): 设定一次最多检索出的对象的数目. 在默认情况下, Query 和 Criteria 接口检索出查询结果中所有的对象
映射文件定义查询语句
Hibernate 允许在映射文件中定义字符串形式的查询语句.
- < query > 元素用于定义一个 HQL 查询语句, 它和 < class> 元素并列.
<query name="findgyid"><![CDATA[FROM student s where s.sname like:sname]]></query>
- 在程序中通过 Session 的 getNamedQuery() 方法获取查询语句对应的 Query 对象.
投影查询
投影查询: 查询结果仅包含实体的部分属性. 通过 SELECT 关键字实现.
Query 的 list() 方法返回的集合中包含的是数组类型的元素, 每个对象数组代表查询结果的一条记录
可以在持久化类中定义一个对象的构造器来包装投影查询返回的记录, 使程序代码能完全运用面向对象的语义来访问查询结果集.
可以通过 DISTINCT 关键字来保证查询结果不会返回重复元素