本节内容

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

引入

我们花了大量的篇幅介绍了相关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. YII用户注冊和用户登录(三)之模型中规则制定和分析

    3 模型中规则制定和分析 YII模型主要分为两类,一个数据模型,处理和数据库相关的增删改查.继承CActiveRecord.还有一个是表单模型,继承CFormModel.不与数据库进行交互.操作与数据 ...

  2. pyhton 从web获取json数据 保存到本地然后再读取

    从web中获取json数据直接进行处理总认为太慢.主要是从web中获取获取数据的过程有点慢. 所以就在想 假设先利用空暇时间把json数据获取并保存到本地,然后再从本地文件里读取和操作.应该就要快非常 ...

  3. 使用 `ConfigMap` 挂载配置文件

    使用 ConfigMap 挂载配置文件 Intro 有一些敏感信息比如数据库连接字符串之类的出于安全考虑,这些敏感信息保存在了 Azure KeyVault 中,最近应用上了 k8s 部署,所以想把 ...

  4. MySQL常见数据库引擎及比较

    一:MySQL存储引擎简介 MySQL有多种存储引擎,每种存储引擎有各自的优缺点,大家可以择优选择使用:MyISAM.InnoDB.MERGE.MEMORY(HEAP).BDB(BerkeleyDB) ...

  5. AtCoder Regular Contest 069

    1. C - Scc Puzzle 计算scc的个数,先判断s个数需要多少个cc,多的cc,每四个可以组成一个scc.注意数据范围,使用long long. #include<bits/stdc ...

  6. js+css模仿打字效果

    1.效果 2.源码 <%@ page contentType="text/html;charset=UTF-8" language="java" %> ...

  7. javascript一个作用域案例分析

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. python 编码问题解决方案

    1.UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128) ...

  9. Ubuntu安装配置Python.pyDev

    一:安装ECLipse Eclipse官网下载软件tar包: 使用解压命令: sudo tar xzvf xxxxx.tar.gz -c /opt/ 创建快捷方式到桌面. 二:安装python-Num ...

  10. jQuery访问json文件(一个例子)

    保存网址 打开时 点开一个类型 当点开一个类型,其他类型隐藏 回到所有类型 没有错,左下角有个这是什么样子的图标 做到了什么: 1.从json文件中取得网址,并根据访问次数排列,放到前面: 2.就是1 ...