zoukankan      html  css  js  c++  java
  • Spring.NET学习笔记18——整合NHibernate(基础篇) Level 300

      NHibernate是一个基于.Net的针对关系型数据库的对象持久化(ORM)类库。NHibernate来源于非常优秀的基于Java的NHibernate关系型持久化工具。从数据库底NHibernate来持久化你的.Net 对象到关系型数据库。NHibernate为你处理这些,远胜于你不得不写SQL去从数据库存取对象。你的代码仅仅和对象关联,NHibernate自动产生SQL语句,并确保对象提交到正确的表和字段中去。

      Spring.NETNHibernate提供了很好的支持与封装。Spring.Data.NHibernate.Generic.SupportSpring.Data.NHibernate.Support下的HibernateDaoSupport是Spring.NET提供的数据库访问对象(DAO)的基类,两者的却别在于对泛型的支持程度。我们以Spring.Data.NHibernate.Generic.Support.HibernateDaoSupport为例,讲解Spring.NET整合NHibernate开发。

      我归纳了一下,分为三个步骤:

      一、实体对象的建立及配置

      二、数据访问对象建立及配置

      三、业务处理层建立及配置

      首先让我们学习一下NHibernate的实体对象的映射:我建立两个实体“用户信息”和“公司信息”。图1所示。

    图1

      

    Model

      
      NHibernate要求实体必须是带有无参构造函数和带有virtual修饰的属性。两个实体的关系是双向(一对多——多对一)映射关系。

    xxx.hbm.xml

      以上就是实体对象与数据的映射文件,提供的配置我不详细说明,请查看NHibernate的帮助手册。

      接下来,我建立数据库访问对象(DAO)层。在这里我使用了泛型Repository模式。

    Repository

      数据库访问对象我们可以让它继承于HibernateDaoSupport类,该类的HibernateTemplate属性我们可以通过Spring.NET从外部注入。

    Repository.xml

      db:provider节点是数据的连接字符串配置,我们引入xmlns:db="http://www.springframework.net/database这项命名空间便可以使用它。其中provider属性为数据库提供者的名称。以下是provider的详细情况:

    名称

    介绍

    SqlServer-1.1

    Microsoft SQL Server, provider V1.0.5.0 in framework .NET V1.1

    SqlServer-2.0

    Microsoft SQL Server, provider V2.0.0.0 in framework .NET V2.0

    SqlServerCe-3.1

    Microsoft SQL Server Compact Edition, provider V9.0.242.0

    SqlServerCe-3.5.1

    Microsoft SQL Server Compact Edition, provider V3.5.1.0

    OleDb-1.1

    provider V1.0.5000.0 in framework .NET V1.1

    OleDb-2.0

    provider V2.0.0.0 in framework .NET V2.0

    OracleClient-2.0

    Oracle, Microsoft provider V2.0.0.0

    OracleODP-2.0

    Oracle, Oracle provider V2.102.2.20

    MySql

    MySQL provider 1.0.10.1

    MySql-1.0.9

    MySQL provider 1.0.9

    MySql-5.0

    MySQL provider 5.0.7.0

    MySql-5.0.8.1

    MySQL provider 5.0.8.1

    MySql-5.1

    MySQL provider 5.1.2.2

    MySql-5.1.4

    MySQL provider 5.1.2.2

    MySql-5.2.3

    MySQL provider 5.2.3.0

    Npgsql-1.0

    Postgresql provider 1.0.0.0 (and 1.0.0.1 - were build with same version info)

    Npgsql-2.0 -beta1

    Postgresql provider 1.98.1.0 beta 1

    Npgsql-2.0

    Postgresql provider 2.0.0.0

    DB2-9.0.0-1.1

    IBM DB2 Data Provider 9.0.0 for .NET Framework 1.1

    DB2-9.0.0-2.0

    IBM DB2 Data Provider 9.0.0 for .NET Framework 2.0

    DB2-9.1.0-1.1

    IBM DB2 Data Provider 9.1.0 for .NET Framework 1.1

    DB2-9.1.0.2

    IBM DB2 Data Provider 9.1.0 for .NET Framework 2.

    SQLite-1.0.43

    SQLite provider 1.0.43 for .NET Framework 2.0

    SQLite-1.0.47

    SQLite provider 1.0.43 for .NET Framework 2.0

    SybaseAse-12

    Sybase ASE provider for ASE 12.x

    SybaseAse-15

    Sybase ASE provider for ASE 15.x

    SybaseAse-AdoNet2

    Sybase ADO.NET 2.0 provider for ASE 12.x and 15.x

    Odbc-1.1

    ODBC provider V1.0.5000.0 in framework .NET V1.1

    Odbc-2.0

    ODBC provider V2.0.0.0 in framework .NET V2

    InterSystems.Data.CacheClient

    Caché provider Version 2.0.0.1 in framework .NET V2

     

      可以根据自己的数据库选择不同的提供者名称。connectionString属性为数据库的连接字符串,这里用${xxx}的方式来表示一个占位符,因为我们经常将Spring.NET的配置文件设置为“嵌入系统资源”,这样一来在程序编译后就不能够修改,所以我们就要在应用程序配置文件中填写连接字符串,而不是在Spring.NET的配置文件中填写。

     

    App.config

       

      NHibernate中的Session控制取决于SessionFactorySpring.NET提供了LocalSessionFactoryObject类来统一管理SessionFactory。其中MappingAssemblies属性为实体程序集的名称,可以填写多个名称。HibernatePropertiesNHibernate的配置,dialect属性为数据库的方言,因为是SQL server 2K数据库,所以使用NHibernate.Dialect.MsSql2000Dialect proxyfactory.factory_class属性为延迟加载的代理类驱动,在NHibernate 2.1版中必须配置。hbm2ddl.auto属性为反向建立映射表的配置,我们配置为update后,NHibernate会帮我们自动根据实体的结构生成数据库中的表。

     

      接下来我们看一下业务处理层。

     

    UserManager

     

    CompanyManager

     

      代码的编写我不仔细讲,我们主要学习一下相关的配置。

     

    Manager.xml

      我们在前几篇学过AOP拦截和事务代理。Spring.NETNHibernate提供的事务代理是TransactionProxyFactoryObject。我们将改类的Target熟悉注入业务处理层的类,这样Spring.NET会为该类包装上事务。

      最后我们写一个单元测试类,对业务层进行单元测试。

    UserManagerTest
    CompanyManagerTest

      配置文件:

    App.config

      代码下载

     

      数据库我没有上传,因为空间的问题。我设置了自动建表的属性,可以用来自动创建数据库表结构。

     

      返回目录

  • 相关阅读:
    MySql事务试什么?具有哪些特性
    MySQL的前缀索引你是如何使用的
    你知道联合索引吗?它的最左原则是什么?
    你来说一下 Mysql 索引有几种类型呢?分别是什么?
    什么是Mysql的回表查询?聊一聊
    JavaScript中使用typeof运算符需要注意的几个坑
    prototype和__proto__
    JavaScript中的普通函数与构造函数比较
    原型和原型链
    document.querySelector和querySelectorAll方法
  • 原文地址:https://www.cnblogs.com/GoodHelper/p/SpringNet_NHibernate.html
Copyright © 2011-2022 走看看