本节内容

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

引入

我们花了大量的篇幅介绍了相关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. 简单总结static、final、this关键字的使用

    在最近看书的过程中,常常遇到static.final.this这三个关键字,不是很明白它们的使用,查阅资料结合实例做了如下总结: 一.static——无需创建对象就可以调用(方法.属性). 1.静态变 ...

  2. 一张游览PHP内核迷宫的藏宝图

    PHP内核就像一个迷宫,假设没有一个纵览全局的图,仅仅是面对当中的一个点,就会像进了迷宫一样,走着走着就走到了死胡同.在这个迷宫里转悠了非常久之后,近期得到了一张PHP藏宝图.然后看着这张图去游览PH ...

  3. 日积(Running)月累(ZSSURE):Task之Cancel、OpenAccess之Delete及fo-dicom之DeepCopy、

    题记: 最近看了一篇关于架构方面的良心长文你的架构是怎样一步步腐化的?,文中字字句句道出了诸多从业者.初创企业,以及BAT都会遇到的问题,细细品读后认为工作生活中的诸多情况皆如此,都会有一个体量由小到 ...

  4. POJ3204 Ikki's Story - Road Reconstruction 网络流图的关键割边

    题目大意:一个有源有汇的城市,问最少增加城市中的多少道路可以增加源到汇上各个路径上可容纳的总车流量增加. 网络流关键割边集合指如果该边的容量增加,整个网络流图中的任意从原点到汇点的路径的流量便可增加. ...

  5. Android5.1开机LOGO与开机动画【转】

    本文转载自:http://blog.csdn.net/u014770862/article/details/52624627 android5.1中,开机LOGO部分和之前版本的并不相同,主要区别在于 ...

  6. [HDU 6318] Swaps and Inversions

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6318 [算法] 线段树 / 树状数组 [代码] #include<bits/stdc++.h ...

  7. spring框架spring之HibernateTemplate

    转自:https://blog.csdn.net/acmman/article/details/44652207

  8. php保存远程图片

    php获取远程图片并把它保存到本地 来源:   时间:2013-09-05 19:26:57   阅读数:45006 分享到:1 [导读] 在php中我们经常使用写一些简单的采集功能,这样可以自动把远 ...

  9. ubuntu刚安装好之后apt-get使用异常

    gaozhang 刚安装好之后,想执行apt-get update 任务,出现以下错误提示   提示说明apt正在执行,我们就野蛮的将apt进程杀.死即可,不过有点多,一个个kill   执行完之后再 ...

  10. jquery选择器(可见对象,不可见对象) +判断,对象(逆序)

    //可见对象: $("li:visible ") //可见对象下的 隐藏对象 $("li:visible [type='hidden']") //获得 可见 的 ...