﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-NewMoring-文章分类-hibernate 的相关知识</title><link>http://www.blogjava.net/NewMoring/category/39202.html</link><description>与Java同路，赢在未来。</description><language>zh-cn</language><lastBuildDate>Mon, 04 May 2009 11:05:01 GMT</lastBuildDate><pubDate>Mon, 04 May 2009 11:05:01 GMT</pubDate><ttl>60</ttl><item><title>SchemaExport工具与DDL文件</title><link>http://www.blogjava.net/NewMoring/articles/268852.html</link><dc:creator>清晨</dc:creator><author>清晨</author><pubDate>Mon, 04 May 2009 09:23:00 GMT</pubDate><guid>http://www.blogjava.net/NewMoring/articles/268852.html</guid><wfw:comment>http://www.blogjava.net/NewMoring/comments/268852.html</wfw:comment><comments>http://www.blogjava.net/NewMoring/articles/268852.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/NewMoring/comments/commentRss/268852.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/NewMoring/services/trackbacks/268852.html</trackback:ping><description><![CDATA[<h1>DDL</h1>
　　数据库模式定义语言DDL(Data Definition Language)，是用于描述数据库中要存储的现实世界实体的语言。一个数据库模式包含该数据库中所有实体的描述定义。这些定义包括结构定义、操作方法定义等。<br />
　　DDL描述的模式，必须由计算机软件进行编译，转换为便于计算机存储、查询和操纵的格式，完成这个转换工作的程序称为模式编译器。<br />
　　模式编译器处理模式定义主要产生两种类型的数据：数据字典以及数据类型和结构定义。<br />
　　数据字典和数据库内部结构信息是创建该模式所对应的数据库的依据，根据这些信息创建每个数据库对应的逻辑结构；对数据库数据的访问、查询也根据模式信息决定数据存取的方式和类型，以及数据之间的关系和对数据的完整性约束。<br />
　　数据字典是模式的内部信息表示，数据字典的存储方式对不同的DBMS各不相同。<br />
　　数据类型和结构的定义，是指当应用程序与数据库连接操作时，应用程序需要了解产生和提取的数据类型和结构。是为各种宿主语言提供的用户工作区的数据类型和结构定义，使用户工作区和数据库的逻辑结构相一致，减少数据的转换过程，这种数据类型和结构的定义通常用一个头文件来实现。<br />
　　数据库模式的定义通常有两种方式: 交互方式定义模式和通过数据描述语言 DDL 描述文本定义模式。 常见的DDL语句
<h2></h2>
　　<strong>CREATE DATABASE<br />
　　</strong>创建数据库<br />
　　CREATE {DATABASE | SCHEMA} db_name<br />
　　| [DEFAULT] COLLATE collation_name<strong><br />
　　CREATE TABLE 　　创建数据库表格<br />
　　CREATE [TEMPORARY] TABLE tbl_name<br />
　　<strong>ALTER TABLE</strong><br />
　　修改数据库表格<br />
　　ALTER TABLE tbl_name<br />
　　ADD [COLUMN] column_definition [FIRST | AFTER col_name ]<br />
　　| ADD [COLUMN] (column_definition,...)<br />
　　| ADD INDEX (index_col_name,...)<br />
　　| ADD [CONSTRAINT [symbol]]<br />
　　PRIMARY KEY (index_col_name,...)<br />
　　| ADD [CONSTRAINT [symbol]]<br />
　　UNIQUE (index_col_name,...)<br />
　　| ADD (index_col_name,...)<br />
　　| ADD [CONSTRAINT [symbol]]<br />
　　FOREIGN KEY (index_col_name,...)<br />
　　[reference_definition]<br />
　　| ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}<br />
　　| CHANGE [COLUMN] old_col_name column_definition<br />
　　[FIRST|AFTER col_name]<br />
　　| MODIFY [COLUMN] column_definition [FIRST | AFTER col_name]<br />
　　| DROP [COLUMN] col_name<br />
　　| DROP PRIMARY KEY<br />
　　| DROP INDEX index_name<br />
　　| DROP FOREIGN KEY fk_symbol<br />
　　| DISABLE KEYS<br />
　　| ENABLE KEYS<br />
　　| RENAME [TO] new_tbl_name<br />
　　| ORDER BY col_name<br />
　　| CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]<br />
　　| [DEFAULT] CHARACTER SET charset_name [COLLATE collation_name]<br />
　　| DISCARD TABLESPACE<br />
　　| IMPORT TABLESPACE<br />
　　<strong>DROP TABLE</strong><br />
　　删除数据库表格<br />
　　DROP [TEMPORARY] TABLE <br />
　　tbl_name [, tbl_name] ...<br />
　　[RESTRICT | CASCADE]<strong><br />
　　CREATE VIEW</strong><br />
　　创建视图<br />
　　CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]<br />
　　VIEW view_name [(column_list)]<br />
　　[WITH [CASCADED | LOCAL] CHECK OPTION]<br />
　　<strong>ALTER VIEW</strong><br />
　　修改视图<br />
　　ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]<br />
　　VIEW view_name [(column_list)]<br />
　　AS select_statement<br />
　　[WITH [CASCADED | LOCAL] CHECK OPTION]<br />
　　<strong>DROP VIEW</strong><br />
　　删除视图<br />
　　DROP VIEW <br />
　　view_name [, view_name] ...<br />
　　[RESTRICT | CASCADE]<br />
</strong>
<img src ="http://www.blogjava.net/NewMoring/aggbug/268852.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/NewMoring/" target="_blank">清晨</a> 2009-05-04 17:23 <a href="http://www.blogjava.net/NewMoring/articles/268852.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>初探SchemaExport工具使用(转帖)</title><link>http://www.blogjava.net/NewMoring/articles/268848.html</link><dc:creator>清晨</dc:creator><author>清晨</author><pubDate>Mon, 04 May 2009 09:11:00 GMT</pubDate><guid>http://www.blogjava.net/NewMoring/articles/268848.html</guid><wfw:comment>http://www.blogjava.net/NewMoring/comments/268848.html</wfw:comment><comments>http://www.blogjava.net/NewMoring/articles/268848.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/NewMoring/comments/commentRss/268848.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/NewMoring/services/trackbacks/268848.html</trackback:ping><description><![CDATA[<p><em><strong>本节内容</strong></em></p>
<ul>
    <li>引入
    <li>SchemaExport工具
    <li>SchemaUpdate工具
    <li>实例分析
    <li>结语 </li>
</ul>
<h2>引入</h2>
<p>我其实都是一直先编写持久化类和映射文件，然后使用SchemaExport工具生成数据库架构。这样的方式就是领域驱动设计/开发(DDD，Domain Driven Design/Development)。我的理解是系统的设计应该基于对象模型，主要考虑对象的设计和逻辑上，然后按照对象模型建立数据库关系模型，这才是现在面向对象开发的步骤，并不是上一篇先设计数据库然后再设计对象。用一幅图可以形象的说明领域驱动设计：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/lyj/NHibernate/19-1.jpg" target="_blank"><img title="NHibernate之旅(19)：初探SchemaExport工具使用 - 布衣 - 笑对人生,万事皆成." alt="领域驱动设计模型" src="http://images.cnblogs.com/cnblogs_com/lyj/NHibernate/19-1.jpg" width="471" height="282" /></a></p>
<p>当在设计时，我们的领域模型需要改变，只需修改NHibernate结构和应用程序，不需要修改数据库架构，只要利用SchemaExport工具重新生成数据库架构就可以了。但是使用数据库只是其中一种方式，我们也可以使用XML文件来存储数据。</p>
<h2>SchemaExport工具</h2>
<p>NHibernate的hbm2dll提供SchemaExport工具：给定一个连接字符串和映射文件，不需输入其他东西就可以按照持久化类和映射文件自动生成数据库架构，现在SchemaExport工具还不是很强大，但是一般应用足够了，它还是一个相当原始的API还在不断改进。</p>
<p>SchemaExport工具就是把DDL脚本输出到标准输出，同时/或者执行DDL语句。SchemaExport工具提供了三个方法，分别是Drop()、Create()、Execute()，前两个方法实质是调用Execute()方法。通常使用Execute()方法来生成数据库架构的。</p>
<h2>SchemaUpdate工具</h2>
<p>在NHibernate2.0中新添加SchemaUpdate工具，可以用来更新数据库架构。但是我觉得没有什么作用，因为它不能Drop现有的表或列，也不能更新现有的列，只能添加新的表和列。如果我需要删除表或者列或者修改其中列，SchemaUpdate工具就显得无能为力了。</p>
<h2>实例分析</h2>
<p>知道了上面的知识就好好实战一下：看看具体怎么使用呢？</p>
<h3>1.SchemaExport工具实战</h3>
<p>通常我们使用生成数据库架构代码实例像这样：</p>
<pre style="color: #2b91af">Configuration </span>cfg=<span style="color: blue">new </span><span style="color: #2b91af">Configuration</span>();
cfg.Configure();
<span style="color: #2b91af">SchemaExport </span>export =<span style="color: blue">new </span><span style="color: #2b91af">SchemaExport</span>(cfg);
export.Execute(....);</pre>
<p><strong>1.准备工作</strong></p>
<p>现在数据访问测试层新建一SchemaExportFixture.cs文件用于测试生成实战。声明一个全局变量_cfg，编写&nbsp;[SetUp]方法在每个测试方法执行之前调用：</p>
<pre style="color: #2b91af">TestFixture</span>]
<span style="color: blue">public class </span><span style="color: #2b91af">SchemaExportFixture
</span>{
<span style="color: blue">private </span><span style="color: #2b91af">Configuration </span>_cfg;
[<span style="color: #2b91af">SetUp</span>]
<span style="color: blue">public void </span>SetupContext()
{
_cfg = <span style="color: blue">new </span><span style="color: #2b91af">Configuration</span>();
_cfg.Configure();
}
<span style="color: green">//测试......</span>
}</pre>
<p><strong>2.测试Drop(script, export)方法</strong></p>
<pre style="color: #2b91af">Test</span>]
<span style="color: blue">public void </span>DropTest()
{
<span style="color: blue">var </span>export = <span style="color: blue">new </span><span style="color: #2b91af">SchemaExport</span>(_cfg);
export.Drop(<span style="color: blue">true</span>, <span style="color: blue">true</span>);
}</pre>
<p>Drop(script, export)方法根据持久类和映射文件执行删除数据库架构。有两个参数，第一个为True就是把DDL语句输出到控制台，第二个为True就是根据持久类和映射文件执行删除数据库架构操作，经过调试可以发现Drop(script, export)方法其实质是执行了Execute(script, export, true, true)方法。</p>
<p><strong>3.测试Create(script, export)方法</strong></p>
<pre style="color: #2b91af">Test</span>]
<span style="color: blue">public void </span>CreateTest()
{
<span style="color: blue">var </span>export = <span style="color: blue">new </span><span style="color: #2b91af">SchemaExport</span>(_cfg);
export.Create(<span style="color: blue">true</span>, <span style="color: blue">true</span>);
}</pre>
<p>Create(script,export)方法根据持久类和映射文件先删除架构后创建删除数据库架构。有两个参数，第一个为True就是把DDL语句输出到控制台，第二个为True就是根据持久类和映射文件先执行删除再执行创建操作，经过调试可以发现这个方法其实质是执行Execute(script,export, false, true)方法。</p>
<p><strong>4.测试Execute(script, export, justDrop, format)方法</strong></p>
<pre style="color: #2b91af">Test</span>]
<span style="color: blue">public void </span>ExecuteTest()
{
<span style="color: blue">var </span>export = <span style="color: blue">new </span><span style="color: #2b91af">SchemaExport</span>(_cfg);
export.Execute(<span style="color: blue">true</span>, <span style="color: blue">true</span>, <span style="color: blue">false</span>, <span style="color: blue">false</span>);
}</pre>
<p>Execute(script, export, justDrop, format)方法根据持久类和映射文件先删除架构后创建删除数据库架构。有四个参数，第一个为True就是把DDL语句输出到控制台；第二个为True就是根据持久类和映射文件在数据库中先执行删除再执行创建操作；第三个为false表示不是仅仅执行Drop语句还执行创建操作，这个参数的不同就扩展了上面两个方法；第四个参数为false表示不是格式化输出DDL语句到控制台，是在一行输出的。</p>
<p>所谓格式化输出就像这样：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/lyj/NHibernate/19-2.jpg" target="_blank"><img title="NHibernate之旅(19)：初探SchemaExport工具使用 - 布衣 - 笑对人生,万事皆成." alt="格式化输出" src="http://images.cnblogs.com/cnblogs_com/lyj/NHibernate/19-2.jpg" width="467" height="351" /></a></p>
<p>一行输出就像这样：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/lyj/NHibernate/19-3.jpg" target="_blank"><img title="NHibernate之旅(19)：初探SchemaExport工具使用 - 布衣 - 笑对人生,万事皆成." alt="一行输出" src="http://images.cnblogs.com/cnblogs_com/lyj/NHibernate/19-3.jpg" width="575" height="347" /></a></p>
<p><strong>5.测试Execute(script, export, justDrop, format, connection, exportOutput)方法</strong></p>
<pre style="color: #2b91af">Test</span>]
<span style="color: blue">public void </span>ExecuteOutTest()
{
<span style="color: blue">var </span>export = <span style="color: blue">new </span><span style="color: #2b91af">SchemaExport</span>(_cfg);
<span style="color: blue">var </span>sb = <span style="color: blue">new </span><span style="color: #2b91af">StringBuilder</span>();
<span style="color: #2b91af">TextWriter </span>output = <span style="color: blue">new </span><span style="color: #2b91af">StringWriter</span>(sb);
export.Execute(<span style="color: blue">true</span>, <span style="color: blue">false</span>, <span style="color: blue">false</span>, <span style="color: blue">false</span>, <span style="color: blue">null</span>, output);
}</pre>
<p>Execute(script, export, justDrop, format, connection, exportOutput)方法根据持久类和映射文件先删除架构后创建删除数据库架构。有六个参数，第一个为True就是把DDL语句输出到控制台；第二个为false就是不执行DDL语句；第五个为自定义连接。当export为true执行语句时必须打开连接。该方法不关闭连接，null就是使用默认连接，最后一个参数自定义输出，这里我输出到TextWriter中。</p>
<h3>2.SchemaUpdate工具实战</h3>
<p>现在数据访问测试层新建一SchemaUpdateFixture.cs文件用于测试生成实战。先声明一个全局变量_cfg：</p>
<pre style="color: blue">private </span><span style="color: #2b91af">Configuration </span>_cfg;</pre>
<p>这里我用另外一种方式配置映射文件，先定义两个映射XML分别代表旧的和新的这样才能体现测试更新数据库架构的意义。</p>
<p>旧映射XML：这里我使用Product持久化类，由于在之前我们定义了Product持久化类，这里直接模拟定义映射XML：拥有主键ProductId和Name字段。</p>
<pre style="color: blue">public const string </span>product_xml =
<span style="color: #a31515">"&lt;?xml version='1.0' encoding='utf-8' ?&gt;" </span>+
<span style="color: #a31515">"&lt;hibernate-mapping xmlns='urn:nhibernate-mapping-2.2'" </span>+
<span style="color: #a31515">"                 assembly='DomainModel'" </span>+
<span style="color: #a31515">"                 namespace='DomainModel'&gt;" </span>+
<span style="color: #a31515">"  &lt;class name='DomainModel.Entities.Product,DomainModel'&gt;" </span>+
<span style="color: #a31515">"    &lt;id name='ProductId'&gt;" </span>+
<span style="color: #a31515">"      &lt;generator class='native'/&gt;" </span>+
<span style="color: #a31515">"    &lt;/id&gt;" </span>+
<span style="color: #a31515">"    &lt;property name='Name'/&gt;" </span>+
<span style="color: #a31515">"  &lt;/class&gt;" </span>+
<span style="color: #a31515">"&lt;/hibernate-mapping&gt;"</span>;</pre>
<p>新映射XML：更新上面映射XML：主键ProductId(没有改变)；Name字段：添加不可为空和长度为50；另外增加了Cost字段，类型为float不可为空。</p>
<pre style="color: blue">public const string </span>newproduct_xml =
<span style="color: #a31515">"&lt;?xml version='1.0' encoding='utf-8' ?&gt;" </span>+
<span style="color: #a31515">"&lt;hibernate-mapping xmlns='urn:nhibernate-mapping-2.2'" </span>+
<span style="color: #a31515">"                 assembly='DomainModel'" </span>+
<span style="color: #a31515">"                 namespace='DomainModel'&gt;" </span>+
<span style="color: #a31515">"  &lt;class name='DomainModel.Entities.Product,DomainModel'&gt;" </span>+
<span style="color: #a31515">"    &lt;id name='ProductId'&gt;" </span>+
<span style="color: #a31515">"      &lt;generator class='native'/&gt;" </span>+
<span style="color: #a31515">"    &lt;/id&gt;" </span>+
<span style="color: #a31515">"    &lt;property name='Name' not-null='true' length='50' /&gt;" </span>+
<span style="color: #a31515">"    &lt;property name='Cost' type='float' not-null='true'/&gt;" </span>+
<span style="color: #a31515">"  &lt;/class&gt;" </span>+
<span style="color: #a31515">"&lt;/hibernate-mapping&gt;"</span>;</pre>
<p>测试前利用旧映射XML创建数据库架构：使用[SetUp]在测试前执行，按照旧映射XML创建数据库架构并格式化输出DDL语句：</p>
<pre style="color: #2b91af">SetUp</span>]
<span style="color: blue">public void </span>SetupContext()
{
<span style="color: green">//模拟旧系统
</span>_cfg = <span style="color: blue">new </span><span style="color: #2b91af">Configuration</span>();
_cfg.Configure();
_cfg.AddXml(product_xml);
<span style="color: blue">var </span>export = <span style="color: blue">new </span><span style="color: #2b91af">SchemaExport</span>(_cfg);
export.Execute(<span style="color: blue">true</span>, <span style="color: blue">true</span>, <span style="color: blue">false</span>, <span style="color: blue">true</span>);
}</pre>
<p>测试更新数据库架构：使用SchemaUpdate类提供的唯一的Execute(script, doUpdate)方法按照新映射XML更新数据库架构：</p>
<pre style="color: #2b91af">Test</span>]
<span style="color: blue">public void </span>UpdateExistingDatabaseSchemaTest()
{
_cfg = <span style="color: blue">new </span><span style="color: #2b91af">Configuration</span>();
_cfg.Configure().AddXml(newproduct_xml);
<span style="color: blue">var </span>update = <span style="color: blue">new </span><span style="color: #2b91af">SchemaUpdate</span>(_cfg);
update.Execute(<span style="color: blue">true</span>, <span style="color: blue">true</span>);
}</pre>
<p>测试输出结果如图所示，如果你觉得不放心再看看数据库Product表。</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/lyj/NHibernate/19-4.jpg" target="_blank"><img title="NHibernate之旅(19)：初探SchemaExport工具使用 - 布衣 - 笑对人生,万事皆成." alt="输出结果" src="http://images.cnblogs.com/cnblogs_com/lyj/NHibernate/19-4.jpg" width="573" height="247" /></a></p>
<p>看到了吗？这显然不是我要求的，首先按照旧映射XML创建了数据库架构，但是更新数据库架构显得无能为力，仅仅增加了Cost字段，我想更新Name字段属性为不可为空和长度为50，但是SchemaUpdate工具不能做到！我觉得这个类目前还没有什么作用，期待下一个版本来完善。</p>
<h2>结语</h2>
<p>这篇文章通过实例介绍NHibernate中提供两个实用工具SchemaExport工具利用持久化类和映射文件生成数据库架构。SchemaUpdate工具通过持久化类和映射文件更新数据库架构。</p>
<img src ="http://www.blogjava.net/NewMoring/aggbug/268848.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/NewMoring/" target="_blank">清晨</a> 2009-05-04 17:11 <a href="http://www.blogjava.net/NewMoring/articles/268848.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernian的jar包的作用</title><link>http://www.blogjava.net/NewMoring/articles/267104.html</link><dc:creator>清晨</dc:creator><author>清晨</author><pubDate>Thu, 23 Apr 2009 03:22:00 GMT</pubDate><guid>http://www.blogjava.net/NewMoring/articles/267104.html</guid><wfw:comment>http://www.blogjava.net/NewMoring/comments/267104.html</wfw:comment><comments>http://www.blogjava.net/NewMoring/articles/267104.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/NewMoring/comments/commentRss/267104.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/NewMoring/services/trackbacks/267104.html</trackback:ping><description><![CDATA[<p><span style="color: #ff9900"><br />
在网络上搜的：hibernate的作用<br />
<br />
hibernate2.jar:</span> <br />
Hibernate的库，必须使用的jar包</p>
<p>&nbsp;</p>
<p><span style="color: #ff9900"><font style="color: #ff9900" color="#000000">cglib-full-2.0.2.jar</font><br />
</span>CGLIB库，Hibernate用它来实现PO字节码的动态生成，非常核心的库，必须使用的jar包</p>
<p><span style="color: #ffcc00"><font style="color: #ff9900" color="#000000">dom4j-1.4.jar</font> <br />
</span>dom4j是一个Java的XML API，类似于jdom，用来读写XML文件的。dom4j是一个非常非常优秀的Java XML API，具有性能优异、功能强大和极端易用使用的特点，同时它也是一个开放源代码的软件，可以在SourceForge上找到它。在IBM developerWorks上面可以找到一篇文章，对主流的Java XML API进行的性能、功能和易用性的评测，dom4j无论在那个方面都是非常出色的。我早在将近两年之前就开始使用dom4j，直到现在。如今你可以看到越来越多的Java软件都在使用dom4j来读写XML，特别值得一提的是连Sun的JAXM也在用dom4j。这是必须使用的jar包，Hibernate用它来读写配置文件。</p>
<p><span style="color: #ff9900"><font style="color: #ff9900" color="#000000">odmg-3.0.jar</font><br />
</span>ODMG是一个ORM的规范，Hibernate实现了ODMG规范，这是一个核心的库，必须使用的jar包。<br />
<br />
<span style="color: #ff9900">commons-collections-2.1.1.jar：</span> <br />
Apache Commons包中的一个，包含了一些Apache开发的集合类，功能比java.util.*强大。必须使用的jar包。</p>
<p><span style="color: #ff9900">commons-beanutils.jar：</span> <br />
Apache Commons包中的一个，包含了一些Bean工具类类。必须使用的jar包。 <br />
<span style="color: #ff9900">*注：</span><span style="font-size: 14pt">我没有在Hibernate的lib中看到这个包，不过在Struts中看到这个包，在网上查了一下，这个包提供了易用的java反射。我没有用这个包，也没有出问题（从这里看到的：</span><a href="http://www.blogjava.net/kobe09/archive/2006/06/14/52745.aspx"><span style="font-size: 10pt">http://www.blogjava.net/kobe09/archive/2006/06/14/52745.aspx</span></a><span style="font-size: 14pt"> ）</span></p>
<p><span style="color: #ff9900">commons-lang-1.0.1.jar</span> <br />
Apache Commons包中的一个，包含了一些数据类型工具类，是java.lang.*的扩展。必须使用的jar包。</p>
<p><span style="color: #ff9900">commons-logging-1.0.4.jar</span> <br />
Apache Commons包中的一个，包含了日志功能，必须使用的jar包。<br />
<br />
<span style="color: #ff9900">从网上查到的，以上为必需的包</span><br />
<br />
<span style="color: #ff9900">anant-1.5.3.jar</span><br />
Ant编译工具的jar包，用来编译Hibernate源代码的。如果你不准备修改和编译Hibernate源代码，那么就没有什么用，可选的jar包</p>
<p><span style="color: #ff9900">ant-optional-1.5.3.jar <br />
</span>Ant的一个辅助包。</p>
<p><span style="color: #ff9900">c3p0-0.8.4.5.jar <br />
</span>C3PO是一个数据库连接池，Hibernate可以配置为使用C3PO连接池。如果你准备用这个连接池，就需要这个jar包。</p>
<p><span style="color: #ff9900">proxool-0.8.3.jar</span> <br />
也是一个连接池，同上。</p>
<p><span style="color: #ff9900">commons-pool-1.2.jar</span>,<span style="color: #ff9900"> commons-dbcp-1.2.1.jar<br />
</span>DBCP数据库连接池，Apache的Jakarta组织开发的，Tomcat4的连接池也是DBCP。</p>
<p>实际上Hibernate自己也实现了一个非常非常简单的数据库连接池，加上上面3个，你实际上可以在Hibernate上选择4种不同的数据库连接池，选择哪一个看个人的偏好，不过DBCP可能更通用一些。另外强调一点，如果在EJB中使用Hibernate，一定要用App Server的连接池，不要用以上4种连接池，否则容器管理事务不起作用。</p>
<p><span style="color: #ff9900">connector.jar</span>: <br />
JCA 规范，如果你在App Server上把Hibernate配置为Connector的话，就需要这个jar。不过实际上一般App Server肯定会带上这个包，所以实际上是多余的包。</p>
<p style="color: #ff9900"><span>jaas.jar<br />
<span style="color: #000000">JAAS是用来进行权限验证的，已经包含在JDK1.4里面了。所以实际上是多余的包。</span></span></p>
<p><span style="color: #ff9900">jcs-1.0-dev.jar <br />
</span>如果你准备在Hibernate中使用JCS的话，那么必须包括它，否则就不用。</p>
<p><span style="color: #ff9900">jdbc2_0-stdext.jar:</span> <br />
JDBC2.0的扩展包，一般来说数据库连接池会用上它。不过App Server都会带上，所以也是多余的。</p>
<p><span style="color: #ff9900">jta.jar：</span> <br />
JTA规范，当Hibernate使用JTA的时候需要，不过App Server都会带上，所以也是多余的。</p>
<p><span style="color: #ff9900">junit-3.8.1.jar</span><br />
Junit包，当你运行Hibernate自带的测试代码的时候需要，否则就不用。</p>
<p><span style="color: #ff9900">xalan-2.4.0.jar, xerces-2.4.0.jar, xml-apis.jar: </span><br />
Xerces是XML解析器，Xalan是格式化器，xml-apis实际上是JAXP。一般App Server都会带上，JDK1.4也包含了解析器，不过不是Xerces，是Crimson，效率比较差，不过Hibernate用XML只不过是读取配置文件，性能没什么紧要的，所以也是多余的。</p>
<img src ="http://www.blogjava.net/NewMoring/aggbug/267104.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/NewMoring/" target="_blank">清晨</a> 2009-04-23 11:22 <a href="http://www.blogjava.net/NewMoring/articles/267104.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>