本节内容
- 引入
- 代码生成工具
- 结语
引入
我们花了大量的篇幅介绍了相关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的持久化类和映射文件。每一个模板都有自己的缺点和长处。生成不同的结构,这在于大家去发现了~~可是我发现还是自己手写代码才是霸道!思路清晰。代码简单!
至今不明确这个问题:代码生成工具究竟给谁用的?新手?老鸟?唯一的优点就是快?不用写代码。
可是你知道它生成的架构吗?它的思路吗?