NHibernate学习(四)Session、Query 与 HQL

NHibernate框架中实体对应数据库中的记录的操作:

static ISessionFactory factory;

static ILog logger;

ISession session;

 

Configuration config = new Configuration();

Config.Configure();

factory = config.BuildSessionFactory();

session = factory.OpenSession();

1、获取记录

User user = (User)session.Get(typeof(User), 1);//数字1为对应数据库中记录的主键值IDUser为实体类的名称

 

或者

User user = session.Get<User>(1); //强类型方法,1为对应记录的ID

 

2、保存记录

session.Save(user);

 

3、更新记录

session.Update(user); 或者

session.Save(user);//也可以更新记录时用Save()方法

 

4、删除记录

session.Delete(user);

 

5、其它获取记录方法

User user=(User)session.Load(typeof(user),1);

或者:

User user = session.Load<User>(5);//强类型方法

这两个方法是假定所指定的实体类是存在的,即假定数据库存在这样的记录,否则会抛出不存在异常,而Get的两个方法不存在时返回null! 

 

6HQLNHibernate Query Language

//IQuery query = session.CreateQuery("from User");//User为映射数据中的表名的实体,数据库中表名为Users,项目中自成的对应实体名为User

//或者 如:(只查询部分字段)

//IQuery query = session.CreateQuery("select u.Id,u.FirstName  From User as u join u.Role as r where r.Id = 1 ");

 

或者 如:(查询整个实体数据)

IQuery query = session.CreateQuery("select u From User as u join u.Role as r where r.Id = 1 ");

//通过连接选中实体u中的所有的属性 join 会自动 匹配 u.RoleId = r. RoleId

IList<User> list = query.List<User>();//执行HQL,下面显示数据

Console.WriteLine(list[0].FirstName);

for (int i = 0; i < list.Count; i++)

{

    Console.WriteLine(list[i].Id);

}

User user1 = list[0];

Console.WriteLine(user1.FirstName);

 

HQL中,我们可以应用where条件查询( =,>,< between ,in like, and ,or, is等)

在选择部分字段时:字段大小写应该尽量跟属性名称保持一致,尤其是在使用别名的情况下,

如:select u.FirstName

在使用HQL时,同样可以利用聚合函数,如 select avg(u.Age),sum(u.Age)

可以对记录进行排序 如:order by u.Id

可以对记录进行分组 如:group by r.Id

 

posted @ 2010-05-11 16:48  Vihone  阅读(1191)  评论(1编辑  收藏  举报