📜  NHibernate-QueryOver查询(1)

📅  最后修改于: 2023-12-03 15:17:52.811000             🧑  作者: Mango

介绍NHibernate-QueryOver查询

NHibernate是一个流行的ORM框架,它可以将数据库操作封装为面向对象的方式,提供了LINQ、Criteria和QueryOver等多种查询方式。

QueryOver是一种基于强类型的查询API,它可以帮助程序员减少错误,并提高代码的可读性。本文将介绍如何使用NHibernate-QueryOver查询。

1. 安装NHibernate

可以通过NuGet Package Manager搜索并安装NHibernate包,或者在官方网站下载。对于本文的示例,我们将使用NHibernate5.2.7版本。

2. 配置NHibernate

在项目中添加一个名为“hibernate.cfg.xml”的文件,该文件包含连接数据库所需的信息。

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
    <property name="connection.connection_string">server=.;database=MyDb;uid=sa;pwd=123456;</property>
    <property name="show_sql">true</property>
    <property name="dialect">NHibernate.Dialect.MsSql2012Dialect</property>
  </session-factory>
</hibernate-configuration>
3. 创建实体类和映射文件

创建一个名为User的实体类,以及一个名为User.hbm.xml的映射文件,将数据库表中的字段映射到实体类中。

实体类:

public class User
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual DateTime BirthDay { get; set; }
    public virtual int Age { get; set; }
    public virtual string Address { get; set; }
}

映射文件:

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="true">
  <class name="NHibernateQueryOverDemo.Model.User,NHibernateQueryOverDemo" table="Users">
    <id name="Id" column="Id">
      <generator class="identity"/>
    </id>
    <property name="Name" column="Name"></property>
    <property name="BirthDay" column="BirthDay"></property>
    <property name="Age" column="Age"></property>
    <property name="Address" column="Address"></property>
  </class>
</hibernate-mapping>
4. 创建NHibernate会话

在查询数据之前,需要创建一个NHibernate会话对象。可以通过以下方法创建:

// 读取配置文件
var configuration = new Configuration().Configure();

// 创建SessionFactory
var sessionFactory = configuration.BuildSessionFactory();

// 创建Session
using (var session = sessionFactory.OpenSession())
{
    // 查询数据
}
5. 查询数据
5.1. 获取所有数据
using (var session = sessionFactory.OpenSession())
{
    var users = session.QueryOver<User>()
        .List();

    foreach (var user in users)
    {
        Console.WriteLine(user.Name);
    }
}
5.2. 按条件查询
using (var session = sessionFactory.OpenSession())
{
    var users = session.QueryOver<User>()
        .Where(u => u.Age > 18 && u.Name.IsLike("张%"))
        .List();

    foreach (var user in users)
    {
        Console.WriteLine(user.Name);
    }
}
5.3. 分页查询
using (var session = sessionFactory.OpenSession())
{
    var pageIndex = 2;
    var pageSize = 10;

    var users = session.QueryOver<User>()
        .Skip((pageIndex - 1) * pageSize)
        .Take(pageSize)
        .List();

    foreach (var user in users)
    {
        Console.WriteLine(user.Name);
    }
}

以上就是NHibernate-QueryOver查询的基本操作,更多高级操作可以查阅官方文档。