本节内容

  • 引入
  • 代码生成工具
  • 结语

引入

我们花了大量的篇幅介绍了相关NHibernate的知识。一直都是带着大家手动编写代码,首先创建数据库架构。然后编写持久化类和映射文件,最后编写数据操作方法。測试方法。

这是典型的数据库驱动开发(DbDD,Database-Driven Developent)技术。可是自己不是这样做的,我先编写持久化类和映射文件,然后偷偷的使用SchemaExport工具把数据库生成了。按上面的步骤写文章的,关于SchemaExport工具就是下一篇的事情了,这篇说说利用数据库架构用代码生成工具生成持久化类和映射文件。

所谓数据库驱动模型是指对象模型随着数据库架构改变而改变。那么我们为什么还使用这个技术呢?有两种原因:你的数据库是遗留下来的系统使用的,数据库中已经存在大量实用数据。不能够更换数据库就将就着使用了。你的数据库架构依照需求分析基本上确定了,不要做不论什么修改。在系统设计初期已经把数据库建好了。

让我们用一张图片来大致展示典型的数据库驱动开发模型。以数据库架构为核心。

使用数据库驱动模型流程就是当数据库架构改动时候,映射文件和持久化类通过代码生成工具又一次生成一下。

我们仅仅要改动应用程序就可以。

这里延伸一个问题:数据库是否须要在项目開始前设计?

假设我们进行数据库设计,那么就产生一系列问题:我们在面向对象领域设计持久化对象必须考虑事先设计好的数据库表结构以及表关系,在编写映射文件时候也要考虑。在面向对象中的继承、多态等特性根本没法使用。所以我不推荐在项目開始设计数据库。大家觉得怎样?所以使用代码生成工具是下下策。

代码生成工具

顾名思义,代码生成工具大家都使用过,有商业的CodeSmith开源的MyGeneration等,这篇我们介绍怎样使用开源MyGeneration代码生成工具依据数据库架构生成映射文件和持久化类。

假设你机器上还没有安装MyGeneration。请到这里下载,然后安装MyGeneration。安装之后,打开MyGeneration,配置“默认设置”、打开“模板浏览器”窗体。这些步骤假设不清楚的话请转向NHibernate之旅(15):探索NHibernate中使用存储过程(上)文章中吧。详细介绍了上面的步骤和方法。

再提示一下:假设你的操作系统是Windows Vista,请右击“以管理员身份执行”MyGeneration。

这篇我们接着做:

Step1:点击“模板浏览器”窗体的第三个“在线更新”button:来在线下载模板。

Step2:出现“在线模板库”窗体。在“在线模板库”中提供了各种各样的模板。找到NHibernate节点:

Step3:展开NHibernate节点,找到“NHibernate Sharp 1.4 [sharpm64]”模板,右键点击“保存”。这个模板就自己主动保存到本地模板目录中。

Step4:点击“模板浏览器”窗体的第一个“刷新”button,这个模板就在“模板浏览器”能够看见了,展开NHibernate节点,右击“运行”NHibernate Sharp1.4模板。

Step5:这就是NHibernate OHM界面窗体,右面显示表、视图、操作标签。在表标签界面上。右边有不映射、映射等button,在表中不同的颜色代表字段不同的属性。

Step6:点击“CustomerId”列。右边显示了这个表,并在状态栏显示了“CustomerId”列的属性:int类型、主键。另外能够自己摸索一下:

Step7:点击“视图”标签,设置CustomerId为主键。

Step8:点击“操作”标签,我们详细设置程序集名称和命名空间名称,这里我设置GenDomainModel,设置生成project。因为这个模板不支持VS2008。所以选择生成IDE版本号为VS2005。设置输出路径。点击OKbutton。

Step9:这时打开目录,代码生成工具依据数据库架构生成了对应的持久化类和映射文件。

Step10:用VS2008打开,VS2008自己主动升级GenDomainModel.csproj解决方式文件。解决方式项目文件例如以下:

Step11:这时就能够使用了。能够把这个类库利用加入现有项目功能加入到我们的项目中作为实体持久层,我们利用这个实体持久层编写数据訪问层方法实现对数据库的CRUD操作。当然在使用前要搞清楚这个项目的类库架构。另外因为模板本身还不是非常完好(比如这个模板不支持版本号控制映射、不支持多对多直接映射),所以我们还须要依照实际情况去改动持久化类和映射,显然无形中添加了一些负担。

注意不要忘记在hibernate.cfg.xml中改动<mapping assembly="DomainModel"/>为<mapping assembly="GenDomainModel"/>。

结语

本身对于代码生成工具的使用非常easy的,就是下一步下一步的按。这节就是多图展示一下怎么高速使用代码生成工具,在MyGeneration中还有非常多模板用于生成NHibernate的持久化类和映射文件。每一个模板都有自己的缺点和长处。生成不同的结构,这在于大家去发现了~~可是我发现还是自己手写代码才是霸道!思路清晰。代码简单!

至今不明确这个问题:代码生成工具究竟给谁用的?新手?老鸟?唯一的优点就是快?不用写代码。

可是你知道它生成的架构吗?它的思路吗?

NHibernate之旅(18):初探代码生成工具使用的更多相关文章

  1. NHibernate之旅系列文章导航

    NHibernate之旅系列文章导航 宣传语 NHibernate.NHibernate教程.NHibernate入门.NHibernate下载.NHibernate教程中文版.NHibernate实 ...

  2. 基于Metronic的Bootstrap开发框架经验总结(18)-- 在代码生成工具Database2Sharp中集成对Bootstrap-table插件的分页及排序支持

    在我们开发系统界面,包括Web和Winform的都一样,主要的界面就是列表展示主界面,编辑查看界面,以及一些辅助性的如导入界面,选择界面等,其中列表展示主界面是综合性的数据展示界面,一般往往需要对记录 ...

  3. 第二章 Mybatis代码生成工具

    1.mybatis-generator作用 1).生成pojo 与 数据库结构对应 2).如果有主键,能匹配主键 3).如果没有主键,可以用其他字段去匹配 4).动态select,update,del ...

  4. C# 代码生成工具 Millennials

    Millennials 是一个可定制的 C# 代码生成工具,支持 MVC 和三层架构.ADO.NET.Nhibernate 和 LINQ. 项目主页:http://www.open-open.com/ ...

  5. 强大的代码生成工具MyGeneration

    强大的代码生成工具MyGeneration 转 MyGeneration是一个功能很强大的代码生成工具.通过编写包含各种类型脚本(C#,VB.Net,JScript,VBScript)的模板,通过数据 ...

  6. LLBLGen代码生成工具

    LLBLGen代码生成工具 下载地址:http://www.llblgen.com/ 最新版本4.2 概述 LLBLGen是一个数据访问的解决方案; 你使用LLBLGen创建实体/域模型,定义了映射和 ...

  7. 【SQL进阶】03.执行计划之旅1 - 初探

    听到大牛们说执行计划,总是很惶恐,是对知识的缺乏的惶恐,所以必须得学习执行计划,以减少对这一块知识的惶恐,下面是对执行计划的第一讲-理解执行计划. 本系列[T-SQL]主要是针对T-SQL的总结. S ...

  8. MVC 5 Scaffolder + EntityFramework+UnitOfWork Pattern 代码生成工具

    MVC 5 Scaffolder + EntityFramework+UnitOfWork Pattern 代码生成工具集成Visual Studio 2013 MVC 5 Scaffolder + ...

  9. C#反射实现 C# 反射 判断类的延伸类型 使用代码生成工具Database2Sharp快速生成工作流模块控制器和视图代码 C# ADO.NET的SqlDataReader对象,判断是否包含指定字段 页面中添加锚点的几种方式 .net 简单实用Log4net(多个日志配置文件) C# 常用小点

    C#反射实现   一.反射概念: 1.概念: 反射,通俗的讲就是我们在只知道一个对象的内部而不了解内部结构的情况下,通过反射这个技术可以使我们明确这个对象的内部实现. 在.NET中,反射是重要的机制, ...

随机推荐

  1. zjnu 1181 石子合并(区间DP)

    Description 在操场上沿一直线排列着 n堆石子. 现要将石子有次序地合并成一堆.规定每次仅仅能选相邻的两堆石子合并成新的一堆, 并将新的一堆石子数记为该次合并的得分.同意在第一次合并前对调一 ...

  2. Code Coverage and Unit Test in SonarQube

    概念 https://blog.ndepend.com/guide-code-coverage-tools/ Code Coverage Results Import (C#, VB.NET) Uni ...

  3. 开源DDos 机器学习思路求解的一些源码——TODO 待分析

    一些源码:https://github.com/elbaulp/MafDet System that aims to detect and mitigate DDoS attacks using Ma ...

  4. nyoj--102--次方求模(快速幂)

    次方求模 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 求a的b次方对c取余的值 输入 第一行输入一个整数n表示测试数据的组数(n<100) 每组测试只有一行,其 ...

  5. 排序系列 之 希尔排序算法 —— Java实现

    基本思想: 希尔排序的实质就是分组插入排序,又称缩小增量法. 将整个无序序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本 ...

  6. AndroidStudio项目CMakeLists解析

    # For more information about using CMake with Android Studio, read the# documentation: https://d.and ...

  7. WPF全球化与本地化

    当一个App需要推出多语言版本时,就需要使用到[全球化与本地化]服务. 原理及过程 资源文件中包含了所有的控件信息,通过导出这些控件信息,修改其对应的相关属性(比如TextBlock的Text属性)的 ...

  8. 关于React-native的介绍以及环境搭建

    React-Native介绍(后面内容的RN就是指react-native) 由facebook公司推出的,基于react,能开发原生app 原理: 1. 利用react框架写好js代码 2. 利用p ...

  9. (转载)activity外部调用startActivity的new task异常解析

    activity外部调用startActivity的new task异常解析 泡在网上的日子 / 文 发表于2013-09-07 12:45  第1314次阅读 异常,android,activity ...

  10. Xcode8 NSLog打印json不完整的解决方案

    解决方案:自定义宏,通过fprintf函数打印log,完美解决! #ifdef DEBUG #define NSLog(FORMAT, ...) fprintf(stderr, "%s:%z ...