• 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

     

  • 相关阅读:
    程序员修神之路--容器技术为什么会这么流行
    程序员修神之路--kubernetes是微服务发展的必然产物
    程序员修神之路--有状态的服务其实可以做更多的事情
    程序员修神之路--要想做好微服务架构,并非易事!
    程序员修神之路--为什么有了SOA,我们还用微服务?
    程序员过关斩将--数据库的乐观锁和悲观锁并非真实的锁
    程序员修神之路--设计一套RPC框架并非易事
    计算机的诞生和简史
    记一次Linux修改MySQL配置不生效的问题
    为什么大多数公司都不重视技术?
  • 原文地址:https://www.cnblogs.com/vihone/p/1732751.html
Copyright © 2020-2023  润新知