📄 toolsetguide.html
字号:
<html><head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>第 15 章 工具箱指南</title><link rel="stylesheet" href="../shared/css/html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.65.1"><link rel="home" href="index.html" title="HIBERNATE - 符合Java习惯的关系数据库持久化"><link rel="up" href="index.html" title="HIBERNATE - 符合Java习惯的关系数据库持久化"><link rel="previous" href="performance.html" title="第 14 章 性能提升(Improving performance)"><link rel="next" href="example-parentchild.html" title="第 16 章 示例:父子关系(Parent Child Relationships)"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">第 15 章 工具箱指南</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="performance.html">上一页</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="example-parentchild.html">下一页</a></td></tr></table><hr></div><div class="chapter" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title"><a name="toolsetguide"></a>第 15 章 工具箱指南</h2></div></div><div></div></div><p> 通过Hibernate项目中提供的几个命令行工具(他们也被当作项目的一部分不断得到维护),还有XDoclet,Middlegen和AndroMDA内置的对Hibernate的支持,可以在几个不同的环境(SQL,java代码,xml映射文件)中进行相互转换(roundtrip)。 </p><p> Hibernate的主发行包中附带了最重要的工具(甚至在Hibernate内部也可以快速调用这个工具): </p><div class="itemizedlist"><ul type="disc"><li><p> 从映射文件到DDL schema的生成器(也就是<tt class="literal">SchemaExport</tt>和<tt class="literal">hbm2ddl</tt>) </p></li></ul></div><p> Hibernate项目直接提供的其他工具在一个单独的发行包中发布,<span class="emphasis"><em>Hibernate Extensions</em></span>。这个发行包包含了下列任务的工具: </p><div class="itemizedlist"><ul type="disc"><li><p> 从映射文件到Java源代码的生成器(也就是<tt class="literal">CodeGenerator</tt>,<tt class="literal">hbm2java</tt>) </p></li><li><p> 从已编译的Java类或者带有XDoclet标记的Java源代码生成映射文件(它们是<tt class="literal">MapGenerator</tt>,<tt class="literal">class2hbm</tt>) </p></li></ul></div><p> 实际上Hibernate Extensions里面还有一个工具:<tt class="literal">ddl2hbm</tt>。但是它已经被废弃了,已经不再被维护了。Middlegen完成了同样的任务,并且更加出色。 </p><p> 对Hibernate提供支持的第三方工具有: </p><div class="itemizedlist"><ul type="disc"><li><p> Middlegen (从现有的数据库schema中生成映射文件) </p></li><li><p> AndroMDA ( 使用MDA思想(Model-Driven Architecture ,模型驱动体系)的代码生成器,它从UML图和其XML/XMI等价形式中生成持久化类的代码) </p></li></ul></div><p> 这些第三方工具没有在这篇指南中说明。请查阅Hibernate 网站得到关于它们目前的情况。(Hibernate主发行包中有关于整个网站的快照) </p><div class="sect1" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="toolsetguide-s1"></a>15.1. Schema 生成器(Schema Generation)</h2></div></div><div></div></div><p> 可以从你的映射文件使用一个命令行工具生成DDL。在Hibernate主发行包的<tt class="literal">hibernate-x.x.x/bin</tt>目录下有一个批处理文件。 </p><p> 生成的schema包含有对实体和集合类表的完整性引用约束(主键和外键)。涉及到的标示符生成器所需的表和sequence也会同时生成。 </p><p> 在使用这个工具的时候,你<span class="emphasis"><em>必须</em></span> 通过<tt class="literal">hibernate.dialet</tt>属性指定一个SQL<tt class="literal">方言(Dialet)</tt>。 </p><div class="sect2" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="toolsetguide-s1-2"></a>15.1.1. 对schema定制化(Customizing the schema)</h3></div></div><div></div></div><p> 很多Hibernate映射元素定义了一个可选的<tt class="literal">length</tt>属性。你可以通过这个属性设置字段的长度。 (如果是Or, for numeric/decimal data types, the precision.) </p><p> 有些tag接受<tt class="literal">not-null</tt>属性(用来在表字段上生成<tt class="literal">NOT NULL</tt>约束)和<tt class="literal">unique</tt>属性(用来在表字段上生成<tt class="literal">UNIQUE</tt>约束)。 </p><p> 有些tag接受<tt class="literal">index</tt>属性,用来指定字段的index名字。<tt class="literal">unique-key</tt>属性可以对成组的字段指定一个组合键约束(unit key constraint)。目前,<tt class="literal">unique-key</tt>属性指定的值<span class="emphasis"><em>并不会</em></span>被当作这个约束的名字,它们只是在用来在映射文件内部用作区分的。 </p><p> 示例: </p><pre class="programlisting"><property name="foo" type="string" length="64" not-null="true"/><many-to-one name="bar" foreign-key="fk_foo_bar" not-null="true"/><element column="serial_number" type="long" not-null="true" unique="true"/></pre><p> 另外,这些元素还接受<tt class="literal"><column></tt>子元素。在定义跨越多字段的类型时特别有用。 </p><pre class="programlisting"><property name="foo" type="string"> <column name="foo" length="64" not-null="true" sql-type="text"/></property><property name="bar" type="my.customtypes.MultiColumnType"/> <column name="fee" not-null="true" index="bar_idx"/> <column name="fi" not-null="true" index="bar_idx"/> <column name="fo" not-null="true" index="bar_idx"/></property></pre><p> <tt class="literal">sql-type</tt>属性允许用户覆盖默认的Hibernate类型到SQL数据类型的映射。 </p><p> <tt class="literal">check</tt>属性允许用户指定一个约束检查。 </p><pre class="programlisting"><property name="foo" type="integer"> <column name="foo" check="foo > 10"/></property><class name="Foo" table="foos" check="bar < 100.0"> ... <property name="bar" type="float"/></class></pre><div class="table"><a name="schemattributes-summary"></a><p class="title"><b>表 15.1. Summary</b></p><table summary="Summary" border="1"><colgroup><col><col></colgroup><thead><tr><th>属性(Attribute)</th><th>值(Values)</th><th>解释(Interpretation)</th></tr></thead><tbody><tr><td><tt class="literal">length</tt></td><td>数字</td><td>字段长度/小数点精度</td></tr><tr><td><tt class="literal">not-null</tt></td><td><tt class="literal">true|false</tt></td><td>指明字段是否应该是非空的</td></tr><tr><td><tt class="literal">unique</tt></td><td><tt class="literal">true|false</tt></td><td>指明是否该字段具有惟一约束</td></tr><tr><td><tt class="literal">index</tt></td><td><tt class="literal">index_name</tt></td><td>指明一个(多字段)的索引(index)的名字</td></tr><tr><td><tt class="literal">unique-key</tt></td><td><tt class="literal">unique_key_name</tt></td><td>指明多字段惟一约束的名字(参见上面的说明)</td></tr><tr><td><tt class="literal">foreign-key</tt></td><td><tt class="literal">foreign_key_name</tt></td><td> 指明一个外键的名字,它是为关联生成的。 </td></tr><tr><td><tt class="literal">sql-type</tt></td><td><tt class="literal">column_type</tt></td><td> 覆盖默认的字段类型(只能用于<tt class="literal"><column></tt>属性) </td></tr><tr><td><tt class="literal">check</tt></td><td>SQL 表达式</td><td> 对字段或表加入SQL约束检查 </td></tr></tbody></table></div></div><div class="sect2" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="toolsetguide-s1-3"></a>15.1.2. 运行该工具</h3></div></div><div></div></div><p> <tt class="literal">SchemaExport</tt>工具把DDL脚本写到标准输出,同时/或者执行DDL语句。 </p><p> <tt class="literal">java -cp </tt><span class="emphasis"><em>hibernate_classpaths</em></span> <tt class="literal">net.sf.hibernate.tool.hbm2ddl.SchemaExport</tt> <span class="emphasis"><em>options mapping_files</em></span> </p><div class="table"><a name="d0e9256"></a><p class="title"><b>表 15.2. <tt class="literal">SchemaExport</tt>命令行选项</b></p><table summary="SchemaExport命令行选项" border="1"><colgroup><col><col></colgroup><thead><tr><th>选项</th><th>说明</th></tr></thead><tbody><tr><td><tt class="literal">--quiet</tt></td><td>不要把脚本输出到stdout</td></tr><tr><td><tt class="literal">--drop</tt></td><td>只进行drop tables的步骤</td></tr><tr><td><tt class="literal">--text</tt></td><td>不执行在数据库中运行的步骤</td></tr><tr><td><tt class="literal">--output=my_schema.ddl</tt></td><td>把输出的ddl脚本输出到一个文件</td></tr><tr><td><tt class="literal">--config=hibernate.cfg.xml</tt></td><td>从XML文件读入Hibernate配置</td></tr><tr><td><tt class="literal">--properties=hibernate.properties</tt></td><td>从文件读入数据库属性</td></tr><tr><td><tt class="literal">--format</tt></td><td>把脚本中的SQL语句对齐和美化</td></tr><tr><td><tt class="literal">--delimiter=x</tt></td><td>为脚本设置行结束符</td></tr></tbody></table></div><p> 你甚至可以在你的应用程序中嵌入<tt class="literal">SchemaExport</tt>工具: </p><pre class="programlisting">Configuration cfg = ....;new SchemaExport(cfg).create(false, true);</pre></div><div class="sect2" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="toolsetguide-s1-4"></a>15.1.3. 属性(Properties)</h3></div></div><div></div></div><p> 可以通过如下方式指定数据库属性: </p><div class="itemizedlist"><ul type="disc" compact><li><p>通过<tt class="literal">-D</tt><span class="emphasis"><em><property></em></span>系统参数</p></li><li><p>在<tt class="literal">hibernate.properties</tt>文件中</p></li><li><p>位于一个其它名字的properties文件中,然后用 <tt class="literal">--properties</tt>参数指定</p></li></ul></div><p> 所需的参数包括: </p><div class="table"><a name="d0e9354"></a><p class="title"><b>表 15.3. SchemaExport 连接属性</b></p><table summary="SchemaExport 连接属性" border="1"><colgroup><col><col></colgroup><thead><tr><th>属性名</th><th>说明</th></tr></thead><tbody><tr><td><tt class="literal">hibernate.connection.driver_class</tt></td><td>jdbc driver class</td></tr><tr><td><tt class="literal">hibernate.connection.url</tt></td><td>jdbc url</td></tr><tr><td><tt class="literal">hibernate.connection.username</tt></td><td>database user</td></tr><tr><td><tt class="literal">hibernate.connection.password</tt></td><td>user password</td></tr><tr><td><tt class="literal">hibernate.dialect</tt></td><td>方言(dialect)</td></tr></tbody></table></div></div><div class="sect2" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="toolsetguide-s1-5"></a>15.1.4. 使用Ant(Using Ant)</h3></div></div><div></div></div><p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -