📄 best-practices.html
字号:
<html><head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>第 24 章 最佳实践(Best Practices)</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="example-mappings.html" title="第 23 章 示例:复杂映射实例"></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">第 24 章 最佳实践(Best Practices)</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="example-mappings.html">上一页</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> </td></tr></table><hr></div><div class="chapter" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title"><a name="best-practices"></a>第 24 章 最佳实践(Best Practices)</h2></div></div><div></div></div><div class="variablelist"><dl><dt><span class="term">设计细颗粒度的持久类并且使用<tt class="literal"><component></tt>来实现映射。</span></dt><dd><p> 使用一个<tt class="literal">Address</tt>持久类来封装 <tt class="literal">street</tt>, <tt class="literal">suburb</tt>, <tt class="literal">state</tt>, <tt class="literal">postcode</tt>. 这将有利于代码重用和简化代码重构(refactoring)的工作。 </p></dd><dt><span class="term">对持久类声明标识符属性( identifier properties)。</span></dt><dd><p> Hibernate中标识符属性是可选的,不过有很多原因来说明你应该使用标识符属性。我们建议标识符应该是“人造”的(自动生成,不涉及业务含义)。 </p></dd><dt><span class="term">使用自然键(natural keys)标识</span></dt><dd><p> 对所有的实体都标识出自然键,用<tt class="literal"><natural-id></tt>进行映射。实现<tt class="literal">equals()</tt>和<tt class="literal">hashCode()</tt>,在其中用组成自然键的属性进行比较。 </p></dd><dt><span class="term">为每个持久类写一个映射文件</span></dt><dd><p> 不要把所有的持久类映射都写到一个大文件中。把 <tt class="literal">com.eg.Foo</tt> 映射到<tt class="literal">com/eg/Foo.hbm.xml</tt>中, 在团队开发环境中,这一点显得特别有意义。 </p></dd><dt><span class="term">把映射文件作为资源加载</span></dt><dd><p> 把映射文件和他们的映射类放在一起进行部署。 </p></dd><dt><span class="term">考虑把查询字符串放在程序外面</span></dt><dd><p> 如果你的查询中调用了非ANSI标准的SQL函数,那么这条实践经验对你适用。把查询字符串放在映射文件中可以让程序具有更好的可移植性。 </p></dd><dt><span class="term">使用绑定变量</span></dt><dd><p> 就像在JDBC编程中一样,应该总是用占位符"?"来替换非常量值,不要在查询中用字符串值来构造非常量值!更好的办法是在查询中使用命名参数。 </p></dd><dt><span class="term">不要自己来管理JDBC connections</span></dt><dd><p> Hibernate允许应用程序自己来管理JDBC connections,但是应该作为最后没有办法的办法。如果你不能使用Hibernate内建的connections providers,那么考虑实现自己来实现<tt class="literal">org.hibernate.connection.ConnectionProvider</tt> </p></dd><dt><span class="term">考虑使用用户自定义类型(custom type)</span></dt><dd><p> 假设你有一个Java类型,来自某些类库,需要被持久化,但是该类没有提供映射操作需要的存取方法。那么你应该考虑实现<tt class="literal">org.hibernate.UserType</tt>接口。这种办法使程序代码写起来更加自如,不再需要考虑类与Hibernate type之间的相互转换。 </p></dd><dt><span class="term">在性能瓶颈的地方使用硬编码的JDBC</span></dt><dd><p> In performance-critical areas of the system, some kinds of operations might benefit from direct JDBC. But please, wait until you <span class="emphasis"><em>know</em></span> something is a bottleneck. And don't assume that direct JDBC is necessarily faster. If you need to use direct JDBC, it might be worth opening a Hibernate <tt class="literal">Session</tt> and using that JDBC connection. That
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -