1. 获取记录
2. 保存记录
3. 删除记录
session.Delet(person);
我们再来看看其它几种方式:
1. Load
是不是感觉和 Get 一样?其实……很不一样!
Get 在找不到对象时会返回一个 null 引用,而 Load 则会抛出一个 ObjectNotFoundException ,所以,不应该用 Load 来判断记录是否存在。另外还有两条非常重要的区别,我们将放在高级话题讨论。
2. Query
Personperson = (Person)list[ 0 ];
~!#@^?? from Person??#$@*&^$
这是虾米??
好象有点象 SQL ,不过少了个 select 啊!而且也没有表名啊!
这就是久负盛名的 HQL —— Hibernate Query Language!
HQL 实际上是基于对象查询的一种仿 SQL 脚本,在运行期间, Hibernate 会自动根据映 射关系将之转换为真正的 SQL 语句来执行。
什么?又一种 SQL ?不是说使用 O/R Mapping 就可以不写 SQL 了吗,怎么又多了一种 “ SQL ”??
当然不是这样了,之所以产生
HQL
,就是为了能够更加灵活更加面向对象地操作数据
,而且你不应该把
HQL
当成一种新的
SQL
,因
为它——太简单好学了!
看看下面的 HQL ,是不是很熟悉??
select Name from Person where Age > 20
select Id,Name from Person where Id > 1 and Age > 20
认出来老兄弟了吧!!
(从这里开始,我们给 person 表添加了一个 age 列,请注意)
ok ,我们这里就详细解释。
“from Person ” 意思是取出 Person 类映射的 person 表中的所有记录,对应的 SQL 是:
“ Select * from person”
还可以加上别名: from Person (as) p = Select * from person (as) p
这样一解释就很清楚了吧!一句话,你便已经掌握了 HQL 的 50% !
而“ select Name from Person” ,当然也就是只取 person 表的 name 列了!
你所知道的 where 中的 and 、 or 、 is 、 like 、 between 、 > 、 < 、 = 等等都可以直接拿来使用,
如下:
from Personp where p.Age between 20 and 30
from personp where p.Age in ( 20 , 30 )
from personp where p.Name is null
from personp where p.Name like “Jaki % ”
注意:字段大小写应该尽量跟属性名称保持一致,尤其是在使用别名的情况下,如:
p.age
将会导致一个“无法解析属性
age
“的错误。但是在不使用别名的情况下我的机器
上”
age
“和
’Age
“一样可以通过,虽然如此,
建议还是跟类文件保持一致。
执行 HQL 是通过 IQuery 来实现的,如下是详细的写法:
IListlist = query.List();
通过
session
来创建一个
query
,然后执行
query
的
List
方法,返回符合条件的
IList
。
如上面的“ from Person “,将返回 person 表的所有记录, list 中将包含映射到 Person 类
的对应表中所有记录的对象。
好了,这一篇就讲这么多,我们下次再接着练习。
任何建议或者批评,请
e
:
abluedog@163.com