目录
Hibernate(Hibernate Query Language,Hibernate查询语言)
Hibernate支持三种查询方式
(1)HQL查询
Hibernate(Hibernate Query Language,Hibernate查询语言)是一种面向对象的查询语言,其中没有表和字段的概念,只有对象和属性的概念。HQL是完全面向对象的,它可以理解继承,多态和关联之类的概念
(2)Criteria查询
Criteria查询采用面向对象的方式构造查询
(3)原生SQL查询
原生SQL查询就是直接执行SQL语句的查询,可以在SQL中利用不同数据库所特有的一些特性进行查询
编写HQL语句
HQL语句中除了Java类和属性的名称外,查询语句对大小写不敏感,所以SELECT和select是相同的,HQL语句中的关键字建议使用小写字母
1.from子句
// 全限定类型名
from cn.hibernatedemo.entity.Dept
// 类名省略了包名
from Dept
// 使用别名,as可以省略
from Dept as dept
2.select子句
// select子句选取了一个属性Name,也可选取多个
select dept.Name from Dept as dept
// select后跟的是别名dept
select dept from Dept as dept
3.where子句
// 在where子句中使用属性名Name
from Dept where Name = ‘What’
// 指派了别名
from Dept as dept where dept.Name = ‘What’
// 查询姓名不为空
from Dept as dept where dept.Name is not null
4.使用表达式
// 表达式一般用在where子句中
// 把字符串中的字母换为小写
form Dept dept where lower(dept.Name) = ‘***’
// 获取日期字段的年份
form Dep where year(deptDate) = 1000
5.order by子句
指定按属性排序
// 执行HQL语句
Query query = session.createQuery(“from Person”);
Oracle对象构建好以后,有两种方式执行查询语句并获取查询结果,一种是Query对象的list()方法,另一种是Query对象的inerate()方法
在HQL语句中绑定参数
1.按参数位置绑定
用?占位符
setXXX()方法,参数的下标从0开始
2.按参数名称绑定
定义命名参数,以“:”开头
String sql = “select * from where id = :sid”;
query.setString(“sid”,”1001”);
setXXX(),第一个为名称,第二个为值
绑定各种类型的参数
1.Query接口提供的绑定不同数据类型的参数的方法
setXXX():绑定类型为java.lang.XXX的参数
// 两种重载
// 按位置绑定参数
setString(int postion , String val)
// 按名称绑定参数
setString(String name , String val)
Hibernate还提供了setParameter()方法,用来绑定任意的类型参数
该方法使用Object,类型作为HQL的参数的类型
2.setProperties()方法:绑定命名参数与下一个对象的属性值
根据命名参数的名称,从实体类对象中获取相应的属性值进行赋值。
HQL参数按“: name”命名
name要与属性的名字对应
使用uniqueResult()方法获取唯一结果
跟list()用法差不多,但是,当查询结果不唯一的时候,不能使用uniqueResult()方法;否则会报错NonUniqueResultExeption
分页和投影
分页
// 分页数据从几条开始
setFirstResult(int firstResult)
// 取出多少条记录
setMaxResults(int maxResults)
// 从第一条记录开始
query.setFirstResult(0);
// 取出四条记录
query.setMaxResults(4);
投影查询
有时数据展示并不需要获取对象的全部属性,而是只需要对象的某一个或某几个属性,或者需要通过表达式、聚合函数等方式得到某些结果,此时可以使用投影查询
投影查询需要使用select子句
1.每条查询结果仅包含一个结果集
每条查询结果作为一个Object对象进行引用
select dName from Dept
2.每条查询结果包含不止一个结果列
每条查询结果将被封装成Object数组
select did,dName from Dept
3.将每条查询结果通过构造方法封装成对象
以对象的方式使用查询结果
select new Dept(did,dName) from Dept