4.Hibernate(Hibernate Query Language,Hibernate查询语言)

目录


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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未禾

您的支持是我最宝贵的财富!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值