Hibernate的检索方式(一)

 

1. OID检索

2. HQL检索

3. QBC检索

4. 本地的SQL检索

 

 

下面一一介绍一下:

 

OID索引:这个比较简单,session.get()、session.load()

-----------------------------

HQL索引:使用面向对象的HQL语言进行查询

 

 

HQL是一种面向对象的查询语言,和SQL查询语言有些类似

在Hibernate提供的各种检索方式中,HQL是使用最广的一种检索方式

Query接口是HQL查询接口,提供各种查询功能

 

特点:

 

 

  * 在查询语句中设定各种条件

  * 支持投影

  * 支持分页

  * 支持连接查询

  * 支持分组查询

  * 支持内聚函数的查询

  * 能够调用用户自己定义的SQL函数和标准SQL函数

  * 支持子查询

  * 支持动态绑定参数

 

 

HQL实体查询

注*:

1. HQL子句本身大小写无关,但习惯将关键字小写

2. where子句中给出的是类的属性名而不是数据库表字段名

3. HQL子句本身大小写无关,但其中出现的类名和属性名必须区分大小写

4. HQL delete/update对缓存策略的影响,delete/update子句极有可能造成缓存同步上的障碍

 

where子句:HQL支持的各种运算符

比较运算符 =、<>、>=、<=、>、<、is null、is not null

范围运算符 in、not in、between…and、not between…and、

字符串模式匹配运算符 like

逻辑运算符 and、or、not

 

 

 

 

 

String hql=“ from Tuser where firstname=‘Erica’”; Query query = session.createQuery(hql); List userList = query.list(); 

 

使用别名查询:as关键字用来指定别名,as关键字也可以省略

Query query = session.createQuery(from Tuser where firstname=‘Erica’); Query query = session.createQuery(from Tuser as u where u.firstname=‘Erica’); Query query = session.createQuery(from Tuser u where u.firstname=‘Erica’); 

 

支持多态查询:查询出当前类以及所有子类的实例

 

Titems有两个子类:TBook和TDVD Query query = session.createQuery(“ from mypockage.Titems”); List tList = query.list(); 

Query query = session.createQuery(“from java.lang.Object)”; List list = query.list(); //查询出所有的实体类的实例 

 

检索单个对象

list():返回List类型的查询结果,返回所有满足条件的对象

uniqueResult():返回单个对象

Query query = session.createQuery(from Tuser u where u.id=1); Tuser u = (Tuser)query.uniqueResult(); 

 

order by 子句

from Tuser user order by user.name from Tuser user order by user.name desc from Tuser user order by user.name,user.age desc 
group by 子句

 

select count(user) from Tuser user group by user.age // having子句 select count(user) from Tuser user group by user.age having count(user)>10 

 

参数绑定

提供了各种参数的绑定方法:setString()、setInteger()、setBinary()、setBoolean()、setDate()、setTime()、setText()

 

HQL三个特殊的绑定参数方法

setParamter()绑定任意类型的参数

setProperties()用于把命名参数与一个对象的属性值绑定的查询

setEntity()把参数与持久化类的实例绑定

 

按参数位置绑定

String hql=“ from Tuser as user where user.name=? and user.age=?”; Query query = session.createQuery(hql); query.setString(0,” Erica”); Query.setInteger(1,21); 

按参数名称绑定

String hql=“ from Tuser as user where user.name=:name and user.age=:age”; Query query = session.createQuery(hql); query.setString(“name”,” Erica”); query.setInteger(“age”,21); 

 

实体更新

Transaction tx = session.beginTransaction(); String hql= “update Tusers set address=‘河北石家庄’ ”; Query query = session.createQuery(hql); int ret = query.executeUpadate(); tx .commit(); 


实体删除

Transaction tx = session.beginTransaction(); String hql= “delete Tuser where address=‘河北石家庄’ ”; Query query = session.createQuery(hql); int ret = query.executeUpadate(); tx .commit(); 

 

 

你可能感兴趣的:(Hibernate的检索方式(一))