??xml version="1.0" encoding="utf-8" standalone="yes"?>久久久久国产精品麻豆,a视频网址在线观看,欧美精品福利在线http://www.aygfsteel.com/NewMoring/articles/268852.html清晨清晨Mon, 04 May 2009 09:23:00 GMThttp://www.aygfsteel.com/NewMoring/articles/268852.htmlhttp://www.aygfsteel.com/NewMoring/comments/268852.htmlhttp://www.aygfsteel.com/NewMoring/articles/268852.html#Feedback0http://www.aygfsteel.com/NewMoring/comments/commentRss/268852.htmlhttp://www.aygfsteel.com/NewMoring/services/trackbacks/268852.htmlDDL   数据库模式定义语aDDL(Data Definition Language)Q是用于描述数据库中要存储的现实世界实体的语a。一个数据库模式包含该数据库中所有实体的描述定义。这些定义包括结构定义、操作方法定义等?br />   DDL描述的模式,必须p机软gq行~译Q{换ؓ便于计算机存储、查询和操纵的格式,完成q个转换工作的程序称为模式编译器?br />   模式~译器处理模式定义主要生两U类型的数据Q数据字总及数据类型和l构定义?br />   数据字典和数据库内部l构信息是创模式所对应的数据库的依据,Ҏq些信息创徏每个数据库对应的逻辑l构Q对数据库数据的讉K、查询也Ҏ模式信息军_数据存取的方式和cdQ以及数据之间的关系和对数据的完整性约束?br />   数据字典是模式的内部信息表示Q数据字典的存储方式对不同的DBMS各不相同?br />   数据cd和结构的定义Q是指当应用E序与数据库q接操作Ӟ应用E序需要了解生和提取的数据类型和l构。是为各U宿主语a提供的用户工作区的数据类型和l构定义Q用户工作区和数据库的逻辑l构怸_减少数据的{换过E,q种数据cd和结构的定义通常用一个头文g来实现?br />   数据库模式的定义通常有两U方? 交互方式定义模式和通过数据描述语言 DDL 描述文本定义模式?常见的DDL语句

  CREATE DATABASE
  
创徏数据?br />   CREATE {DATABASE | SCHEMA} db_name
  | [DEFAULT] COLLATE collation_name
  CREATE TABLE   创徏数据库表?br />   CREATE [TEMPORARY] TABLE tbl_name
  ALTER TABLE
  修改数据库表?br />   ALTER TABLE tbl_name
  ADD [COLUMN] column_definition [FIRST | AFTER col_name ]
  | ADD [COLUMN] (column_definition,...)
  | ADD INDEX (index_col_name,...)
  | ADD [CONSTRAINT [symbol]]
  PRIMARY KEY (index_col_name,...)
  | ADD [CONSTRAINT [symbol]]
  UNIQUE (index_col_name,...)
  | ADD (index_col_name,...)
  | ADD [CONSTRAINT [symbol]]
  FOREIGN KEY (index_col_name,...)
  [reference_definition]
  | ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
  | CHANGE [COLUMN] old_col_name column_definition
  [FIRST|AFTER col_name]
  | MODIFY [COLUMN] column_definition [FIRST | AFTER col_name]
  | DROP [COLUMN] col_name
  | DROP PRIMARY KEY
  | DROP INDEX index_name
  | DROP FOREIGN KEY fk_symbol
  | DISABLE KEYS
  | ENABLE KEYS
  | RENAME [TO] new_tbl_name
  | ORDER BY col_name
  | CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]
  | [DEFAULT] CHARACTER SET charset_name [COLLATE collation_name]
  | DISCARD TABLESPACE
  | IMPORT TABLESPACE
  DROP TABLE
  删除数据库表?br />   DROP [TEMPORARY] TABLE
  tbl_name [, tbl_name] ...
  [RESTRICT | CASCADE]
  CREATE VIEW

  创徏视图
  CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
  VIEW view_name [(column_list)]
  [WITH [CASCADED | LOCAL] CHECK OPTION]
  ALTER VIEW
  修改视图
  ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
  VIEW view_name [(column_list)]
  AS select_statement
  [WITH [CASCADED | LOCAL] CHECK OPTION]
  DROP VIEW
  删除视图
  DROP VIEW
  view_name [, view_name] ...
  [RESTRICT | CASCADE]


清晨 2009-05-04 17:23 发表评论
]]>
初探SchemaExport工具使用(转帖)http://www.aygfsteel.com/NewMoring/articles/268848.html清晨清晨Mon, 04 May 2009 09:11:00 GMThttp://www.aygfsteel.com/NewMoring/articles/268848.htmlhttp://www.aygfsteel.com/NewMoring/comments/268848.htmlhttp://www.aygfsteel.com/NewMoring/articles/268848.html#Feedback0http://www.aygfsteel.com/NewMoring/comments/commentRss/268848.htmlhttp://www.aygfsteel.com/NewMoring/services/trackbacks/268848.html本节内容

  • 引入
  • SchemaExport工具
  • SchemaUpdate工具
  • 实例分析
  • l语

引入

我其实都是一直先~写持久化类和映文Ӟ然后使用SchemaExport工具生成数据库架构。这L方式是领域驱动设计/开?DDDQDomain Driven Design/Development)。我的理解是pȝ的设计应该基于对象模型,主要考虑对象的设计和逻辑上,然后按照对象模型建立数据库关pL型,q才是现在面向对象开发的步骤Qƈ不是上一先设计数据库然后再设计对象。用一q图可以形象的说明领域驱动设计:

领域驱动设计模型

当在设计Ӟ我们的领域模型需要改变,只需修改NHibernatel构和应用程序,不需要修Ҏ据库架构Q只要利用SchemaExport工具重新生成数据库架构就可以了。但是用数据库只是其中一U方式,我们也可以用XML文g来存储数据?/p>

SchemaExport工具

NHibernate的hbm2dll提供SchemaExport工具Q给定一个连接字W串和映文Ӟ不需输入其他东西可以按照持久化cd映射文g自动生成数据库架构,现在SchemaExport工具q不是很强大Q但是一般应用够了Q它q是一个相当原始的APIq在不断改进?/p>

SchemaExport工具是把DDL脚本输出到标准输出,同时/或者执行DDL语句。SchemaExport工具提供了三个方法,分别是Drop()、Create()、Execute()Q前两个Ҏ实质是调用Execute()Ҏ。通常使用Execute()Ҏ来生成数据库架构的?/p>

SchemaUpdate工具

在NHibernate2.0中新dSchemaUpdate工具Q可以用来更新数据库架构。但是我觉得没有什么作用,因ؓ它不能Drop现有的表或列Q也不能更新现有的列Q只能添加新的表和列。如果我需要删除表或者列或者修改其中列QSchemaUpdate工具显得无能ؓ力了?/p>

实例分析

知道了上面的知识好好实战一下:看看具体怎么使用呢?

1.SchemaExport工具实战

通常我们使用生成数据库架构代码实例像q样Q?/p>

Configuration cfg=new Configuration();
cfg.Configure();
SchemaExport export =new SchemaExport(cfg);
export.Execute(....);

1.准备工作

现在数据讉K试层新ZSchemaExportFixture.cs文g用于试生成实战。声明一个全局变量_cfgQ编?nbsp;[SetUp]Ҏ在每个测试方法执行之前调用:

TestFixture]
public class SchemaExportFixture
{
private Configuration _cfg;
[SetUp]
public void SetupContext()
{
_cfg = new Configuration();
_cfg.Configure();
}
//试......
}

2.试Drop(script, export)Ҏ

Test]
public void DropTest()
{
var export = new SchemaExport(_cfg);
export.Drop(true, true);
}

Drop(script, export)ҎҎ持久cd映射文g执行删除数据库架构。有两个参数Q第一个ؓTrue是把DDL语句输出到控制台Q第二个为True是Ҏ持久cd映射文g执行删除数据库架构操作,l过调试可以发现Drop(script, export)Ҏ其实质是执行了Execute(script, export, true, true)Ҏ?/p>

3.试Create(script, export)Ҏ

Test]
public void CreateTest()
{
var export = new SchemaExport(_cfg);
export.Create(true, true);
}

Create(script,export)ҎҎ持久cd映射文g先删除架构后创徏删除数据库架构。有两个参数Q第一个ؓTrue是把DDL语句输出到控制台Q第二个为True是Ҏ持久cd映射文g先执行删除再执行创徏操作Q经q调试可以发现这个方法其实质是执行Execute(script,export, false, true)Ҏ?/p>

4.试Execute(script, export, justDrop, format)Ҏ

Test]
public void ExecuteTest()
{
var export = new SchemaExport(_cfg);
export.Execute(true, true, false, false);
}

Execute(script, export, justDrop, format)ҎҎ持久cd映射文g先删除架构后创徏删除数据库架构。有四个参数Q第一个ؓTrue是把DDL语句输出到控制台Q第二个为True是Ҏ持久cd映射文g在数据库中先执行删除再执行创建操作;W三个ؓfalse表示不是仅仅执行Drop语句q执行创建操作,q个参数的不同就扩展了上面两个方法;W四个参Cؓfalse表示不是格式化输出DDL语句到控制台Q是在一行输出的?/p>

所谓格式化输出像q样Q?/p>

格式化输? src=

一行输出就像这P

一行输? src=

5.试Execute(script, export, justDrop, format, connection, exportOutput)Ҏ

Test]
public void ExecuteOutTest()
{
var export = new SchemaExport(_cfg);
var sb = new StringBuilder();
TextWriter output = new StringWriter(sb);
export.Execute(true, false, false, false, null, output);
}

Execute(script, export, justDrop, format, connection, exportOutput)ҎҎ持久cd映射文g先删除架构后创徏删除数据库架构。有六个参数Q第一个ؓTrue是把DDL语句输出到控制台Q第二个为false是不执行DDL语句Q第五个定义q接。当export为true执行语句时必L开q接。该Ҏ不关闭连接,null是使用默认q接Q最后一个参数自定义输出Q这里我输出到TextWriter中?/p>

2.SchemaUpdate工具实战

现在数据讉K试层新ZSchemaUpdateFixture.cs文g用于试生成实战。先声明一个全局变量_cfgQ?/p>

private Configuration _cfg;

q里我用另外一U方式配|映文Ӟ先定义两个映XML分别代表旧的和新的这h能体现测试更新数据库架构的意义?/p>

旧映XMLQ这里我使用Product持久化类Q由于在之前我们定义了Product持久化类Q这里直接模拟定义映XMLQ拥有主键ProductId和Name字段?/p>

public const string product_xml =
"<?xml version='1.0' encoding='utf-8' ?>" +
"<hibernate-mapping xmlns='urn:nhibernate-mapping-2.2'" +
"                 assembly='DomainModel'" +
"                 namespace='DomainModel'>" +
"  <class name='DomainModel.Entities.Product,DomainModel'>" +
"    <id name='ProductId'>" +
"      <generator class='native'/>" +
"    </id>" +
"    <property name='Name'/>" +
"  </class>" +
"</hibernate-mapping>";

新映XMLQ更C面映XMLQ主键ProductId(没有改变)QName字段Q添加不可ؓI和长度?0Q另外增加了Cost字段Q类型ؓfloat不可为空?/p>

public const string newproduct_xml =
"<?xml version='1.0' encoding='utf-8' ?>" +
"<hibernate-mapping xmlns='urn:nhibernate-mapping-2.2'" +
"                 assembly='DomainModel'" +
"                 namespace='DomainModel'>" +
"  <class name='DomainModel.Entities.Product,DomainModel'>" +
"    <id name='ProductId'>" +
"      <generator class='native'/>" +
"    </id>" +
"    <property name='Name' not-null='true' length='50' />" +
"    <property name='Cost' type='float' not-null='true'/>" +
"  </class>" +
"</hibernate-mapping>";

试前利用旧映射XML创徏数据库架构:使用[SetUp]在测试前执行Q按照旧映射XML创徏数据库架构ƈ格式化输出DDL语句Q?/p>

SetUp]
public void SetupContext()
{
//模拟旧系l?
_cfg = new Configuration();
_cfg.Configure();
_cfg.AddXml(product_xml);
var export = new SchemaExport(_cfg);
export.Execute(true, true, false, true);
}

试更新数据库架构:使用SchemaUpdatecL供的唯一的Execute(script, doUpdate)Ҏ按照新映XML更新数据库架构:

Test]
public void UpdateExistingDatabaseSchemaTest()
{
_cfg = new Configuration();
_cfg.Configure().AddXml(newproduct_xml);
var update = new SchemaUpdate(_cfg);
update.Execute(true, true);
}

试输出l果如图所C,如果你觉得不攑ֿ再看看数据库Product表?/p>

输出l果

看到了吗Q这昄不是我要求的Q首先按照旧映射XML创徏了数据库架构Q但是更新数据库架构昑־无能为力Q仅仅增加了Cost字段Q我x新Name字段属性ؓ不可为空和长度ؓ50Q但是SchemaUpdate工具不能做到Q我觉得q个cȝ前还没有什么作用,期待下一个版本来完善?/p>

l语

q篇文章通过实例介绍NHibernate中提供两个实用工具SchemaExport工具利用持久化类和映文件生成数据库架构。SchemaUpdate工具通过持久化类和映文件更新数据库架构?/p>

清晨 2009-05-04 17:11 发表评论
]]>
Hibernian的jar包的作用http://www.aygfsteel.com/NewMoring/articles/267104.html清晨清晨Thu, 23 Apr 2009 03:22:00 GMThttp://www.aygfsteel.com/NewMoring/articles/267104.htmlhttp://www.aygfsteel.com/NewMoring/comments/267104.htmlhttp://www.aygfsteel.com/NewMoring/articles/267104.html#Feedback0http://www.aygfsteel.com/NewMoring/comments/commentRss/267104.htmlhttp://www.aygfsteel.com/NewMoring/services/trackbacks/267104.html
在网l上搜的Qhibernate的作?br />
hibernate2.jar:

Hibernate的库Q必M用的jar?/p>

 

cglib-full-2.0.2.jar
CGLIB库,Hibernate用它来实现PO字节码的动态生成,非常核心的库Q必M用的jar?/p>

dom4j-1.4.jar
dom4j是一个Java的XML APIQ类gjdomQ用来读写XML文g的。dom4j是一个非帔R怼U的Java XML APIQ具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的YӞ可以在SourceForge上找到它。在IBM developerWorks上面可以扑ֈ一文章,对主的Java XML APIq行的性能、功能和易用性的评测Qdom4j无论在那个方面都是非常出色的。我早在近两年之前开始用dom4jQ直到现在。如今你可以看到来多的Java软g都在使用dom4j来读写XMLQ特别值得一提的是连Sun的JAXM也在用dom4j。这是必M用的jar包,Hibernate用它来读写配|文件?/p>

odmg-3.0.jar
ODMG是一个ORM的规范,Hibernate实现了ODMG规范Q这是一个核心的库,必须使用的jar包?br />
commons-collections-2.1.1.jarQ?/span>
Apache Commons包中的一个,包含了一些Apache开发的集合c,功能比java.util.*强大。必M用的jar包?/p>

commons-beanutils.jarQ?/span>
Apache Commons包中的一个,包含了一些Bean工具cȝ。必M用的jar包?
*注:我没有在Hibernate的lib中看到这个包Q不q在Struts中看到这个包Q在|上查了一下,q个包提供了易用的java反射。我没有用这个包Q也没有出问题(从这里看到的Q?/span>http://www.aygfsteel.com/kobe09/archive/2006/06/14/52745.aspx Q?/span>

commons-lang-1.0.1.jar
Apache Commons包中的一个,包含了一些数据类型工LQ是java.lang.*的扩展。必M用的jar包?/p>

commons-logging-1.0.4.jar
Apache Commons包中的一个,包含了日志功能,必须使用的jar包?br />
从网上查到的Q以上ؓ必需的包

anant-1.5.3.jar
Ant~译工具的jar包,用来~译Hibernate源代码的。如果你不准备修改和~译Hibernate源代码,那么没有什么用Q可选的jar?/p>

ant-optional-1.5.3.jar
Ant的一个辅助包?/p>

c3p0-0.8.4.5.jar
C3PO是一个数据库q接池,Hibernate可以配置Z用C3POq接池。如果你准备用这个连接池Q就需要这个jar包?/p>

proxool-0.8.3.jar
也是一个连接池Q同上?/p>

commons-pool-1.2.jar, commons-dbcp-1.2.1.jar
DBCP数据库连接池QApache的Jakartal织开发的QTomcat4的连接池也是DBCP?/p>

实际上Hibernate自己也实C一个非帔R常简单的数据库连接池Q加上上?个,你实际上可以在Hibernate上选择4U不同的数据库连接池Q选择哪一个看个h的偏好,不过DBCP可能更通用一些。另外强调一点,如果在EJB中用HibernateQ一定要用App Server的连接池Q不要用以上4U连接池Q否则容器管理事务不起作用?/p>

connector.jar:
JCA 规范Q如果你在App Server上把Hibernate配置为Connector的话Q就需要这个jar。不q实际上一般App Server肯定会带上这个包Q所以实际上是多余的包?/p>

jaas.jar
JAAS是用来进行权限验证的Q已l包含在JDK1.4里面了。所以实际上是多余的包?/span>

jcs-1.0-dev.jar
如果你准备在Hibernate中用JCS的话Q那么必d括它Q否则就不用?/p>

jdbc2_0-stdext.jar:
JDBC2.0的扩展包Q一般来说数据库q接池会用上它。不qApp Server都会带上Q所以也是多余的?/p>

jta.jarQ?/span>
JTA规范Q当Hibernate使用JTA的时候需要,不过App Server都会带上Q所以也是多余的?/p>

junit-3.8.1.jar
Junit包,当你q行Hibernate自带的测试代码的时候需要,否则׃用?/p>

xalan-2.4.0.jar, xerces-2.4.0.jar, xml-apis.jar:
Xerces是XML解析器,Xalan是格式化器,xml-apis实际上是JAXP。一般App Server都会带上QJDK1.4也包含了解析器,不过不是XercesQ是CrimsonQ效率比较差Q不qHibernate用XML只不q是d配置文gQ性能没什么紧要的Q所以也是多余的?/p>

清晨 2009-04-23 11:22 发表评论
]]>
վ֩ģ壺 | ϸ| | ں| | ƶ| ̨| | ӻ| ˮ| | ݳ| | ƽ| º| ޻| | | ɽ| ̨| | Ȫ| | | ʡ| | Ĭ| | | | ϰ| | | ͼ| ʻ| ˶| | ʡ| п| | ľ|