技术开发 频道

NHibernate Step by Step (四)Session、Query及HQL

【IT168 技术文档】我们总结一下在第二篇中的Session操作:


1. 
获取记录

Person person = (Person)session.Get(typeof(Person),1);

2.  保存记录

session.Save(person);

 3.  删除记录

Person person = (Person)session.Get(typeof(Person),1);

session.Delet(person);

 我们再来看看其它几种方式:

1.  Load

Person person = (Person)session.Load(typeof(Person),1);

 是不是感觉和Get一样?其实……很不一样!

Get在找不到对象时会返回一个null引用,而Load则会抛出一个ObjectNotFoundException,所以,不应该用Load来判断记录是否存在。另外还有两条非常重要的区别,我们将放在高级话题讨论。

2.  Query

IList list = session.CreateQuery(“from Person”).List();

Person person 
= (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 p.Name from Person as p where p.Id=1
select Name from Person where Age>20
select Id,Name from Person where Id>1 and Age>20

0
相关文章