<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_EricGu's  Record-Space</title><subtitle type="text">专注 学习 实践 创新</subtitle><id>http://feed.cnblogs.com/blog/u/32043/rss</id><updated>2010-11-05T07:34:54Z</updated><author><name>EricGu</name><uri>http://www.cnblogs.com/EricGu/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/EricGu/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/32043/rss"/><entry><id>http://www.cnblogs.com/EricGu/archive/2010/11/05/1870004.html</id><title type="text">DES加密解密函数</title><summary type="text">//默认密钥向量privatestaticbyte[]Keys={0x12,0x34,0x56,0x78,0x90,0xAB,0xCD,0xEF};///&amp;lt;summary&amp;gt;///DES加密字符串///&amp;lt;/summary&amp;gt;///&amp;lt;paramname="encryptString"&amp;gt;待加密的字符串&amp;lt;/param&amp;gt;///&amp;lt;paramname="enc...</summary><published>2010-11-05T07:35:00Z</published><updated>2010-11-05T07:35:00Z</updated><author><name>EricGu</name><uri>http://www.cnblogs.com/EricGu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/EricGu/archive/2010/11/05/1870004.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/EricGu/archive/2010/11/05/1870004.html"/><content type="html">&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;默认密钥向量&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;static&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;byte&lt;/span&gt;&lt;span style="color: #000000"&gt;[]&amp;nbsp;Keys&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;0x12&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;0x34&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;0x56&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;0x78&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;0x90&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;0xAB&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;0xCD&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;0xEF&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;};&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;DES加密字符串&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;param&amp;nbsp;name="encryptString"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;待加密的字符串&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;param&amp;nbsp;name="encryptKey"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;加密密钥,要求为8位&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;加密成功返回加密后的字符串，失败返回源串&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;static&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;EncryptDES(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;encryptString,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;encryptKey)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;try&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;byte&lt;/span&gt;&lt;span style="color: #000000"&gt;[]&amp;nbsp;rgbKey&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Encoding.UTF8.GetBytes(encryptKey.Substring(&lt;/span&gt;&lt;span style="color: #000000"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;8&lt;/span&gt;&lt;span style="color: #000000"&gt;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;byte&lt;/span&gt;&lt;span style="color: #000000"&gt;[]&amp;nbsp;rgbIV&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Keys;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;byte&lt;/span&gt;&lt;span style="color: #000000"&gt;[]&amp;nbsp;inputByteArray&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Encoding.UTF8.GetBytes(encryptString);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DESCryptoServiceProvider&amp;nbsp;dCSP&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;DESCryptoServiceProvider();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MemoryStream&amp;nbsp;mStream&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;MemoryStream();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CryptoStream&amp;nbsp;cStream&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;CryptoStream(mStream,&amp;nbsp;dCSP.CreateEncryptor(rgbKey,&amp;nbsp;rgbIV),&amp;nbsp;CryptoStreamMode.Write);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cStream.Write(inputByteArray,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;inputByteArray.Length);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cStream.FlushFinalBlock();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Convert.ToBase64String(mStream.ToArray());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;catch&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;encryptString;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;DES解密字符串&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;param&amp;nbsp;name="decryptString"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;待解密的字符串&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;param&amp;nbsp;name="decryptKey"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;解密密钥,要求为8位,和加密密钥相同&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;解密成功返回解密后的字符串，失败返源串&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;static&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;DecryptDES(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;decryptString,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;decryptKey)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;try&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;byte&lt;/span&gt;&lt;span style="color: #000000"&gt;[]&amp;nbsp;rgbKey&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Encoding.UTF8.GetBytes(decryptKey);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;byte&lt;/span&gt;&lt;span style="color: #000000"&gt;[]&amp;nbsp;rgbIV&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Keys;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;byte&lt;/span&gt;&lt;span style="color: #000000"&gt;[]&amp;nbsp;inputByteArray&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Convert.FromBase64String(decryptString);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DESCryptoServiceProvider&amp;nbsp;DCSP&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;DESCryptoServiceProvider();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MemoryStream&amp;nbsp;mStream&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;MemoryStream();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CryptoStream&amp;nbsp;cStream&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;CryptoStream(mStream,&amp;nbsp;DCSP.CreateDecryptor(rgbKey,&amp;nbsp;rgbIV),&amp;nbsp;CryptoStreamMode.Write);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cStream.Write(inputByteArray,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;inputByteArray.Length);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cStream.FlushFinalBlock();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Encoding.UTF8.GetString(mStream.ToArray());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;catch&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;decryptString;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/span&gt;&lt;img src="http://www.cnblogs.com/EricGu/aggbug/1870004.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/EricGu/archive/2010/11/05/1870004.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/EricGu/archive/2010/11/05/1869717.html</id><title type="text">Hibernate Annotation笔记</title><summary type="text">(1)简介：在过去几年里，Hibernate不断发展，几乎成为Java数据库持久性的事实标准。它非常强大、灵活，而且具备了优异的性能。在本文中，我们将了解如何使用Java 5 注释来简化Hibernate代码，并使持久层的编码过程变得更为轻松。　　传统上，Hibernate的配置依赖于外部 XML 文件：数据库映射被定义为一组 XML 映射文件，并且在启动时进行加载。 在最近发布的几个Hibern...</summary><published>2010-11-05T02:57:00Z</published><updated>2010-11-05T02:57:00Z</updated><author><name>EricGu</name><uri>http://www.cnblogs.com/EricGu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/EricGu/archive/2010/11/05/1869717.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/EricGu/archive/2010/11/05/1869717.html"/><content type="html">&lt;div &gt;&#xD;
&lt;div&gt;(1)&lt;br /&gt;简介：&lt;br /&gt;在过去几年里，Hibernate不断发展，几乎成为Java数据库持久性的事实标准。它非常强大、灵活，而且具备了优异的性能。在本文中，我们将了解如何使用Java 5 注释来简化Hibernate代码，并使持久层的编码过程变得更为轻松。&lt;br /&gt;　　传统上，Hibernate的配置依赖于外部 XML 文件：数据库映射被定义为一组 XML 映射文件，并且在启动时进行加载。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在最近发布的几个Hibernate版本中，出现了一种基于 Java 5 注释的更为巧妙的新方法。借助新的 Hibernate Annotation 库，即可一次性地分配所有旧映射文件&amp;#8212;&amp;#8212;一切都会按照您的想法来定义&amp;#8212;&amp;#8212;注释直接嵌入到您的Java 类中，并提供一种强大及灵活的方法来声明持久性映射。&lt;/div&gt;&#xD;
&lt;div&gt;&lt;strong&gt;即利用hibernate注解后，可不用定义持久化类对应的*.hbm.xml文件，直接以注解方式写入在持久化类中来实现。&lt;/strong&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;font color="#ff0000"&gt;Hibernate annotation使用了ejb JPA的注解,所以，下面安装配置hibernate annotation环境时，需要导入ejb的包。许多网上的资料都是jpa hibernate annotation方面的资料。&lt;/font&gt;&lt;/div&gt;&#xD;
&lt;div&gt;(2)&lt;br /&gt;安装 Hibernate Annotation&lt;br /&gt;第一步，&lt;br /&gt;环境与jar包：&lt;br /&gt;　　要使用 Hibernate Annotation，您至少需要具备 Hibernate 3.2和Java 5。可以从 Hibernate 站点下载 Hibernate 3.2 和 Hibernate Annotation库。除了标准的 Hibernate JAR 和依赖项之外，您还需要 Hibernate Annotations .jar 文件（hibernate-annotations.jar）、Java 持久性 API （lib/ejb3-persistence.jar）。&lt;/div&gt;&#xD;
&lt;div&gt;&lt;strong&gt;添加hibernate3.2.jar,hibernate-annotations-3.3.0.jar，hibernate-commons-annotations.jar和ejb3-persistence.jar 。这样就可以使用hibernate的annotation了。&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;如果您正在使用 Maven，只需要向 POM 文件添加相应的依赖项即可，如下所示：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;groupId&amp;gt;org.hibernate&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;hibernate&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;3.2.1.ga&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;groupId&amp;gt;org.hibernate&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;hibernate-annotations&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;3.2.0.ga&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;groupId&amp;gt;javax.persistence&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;persistence-api&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;1.0&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/dependency&amp;gt; &lt;/div&gt;&#xD;
&lt;div&gt;第二步，&lt;br /&gt;获取 Hibernate 会话工厂。尽管无需惊天的修改，但这一工作与使用 Hibernate Annotations有所不同。您需要使用 AnnotationConfiguration 类来建立会话工厂：&lt;br /&gt;sessionFactory = new AnnotationConfiguration().buildSessionFactory(); &lt;br /&gt;第三步，&lt;br /&gt;尽管通常使用 &amp;lt;mapping&amp;gt; 元素来声明持久性类，您还是需要在 Hibernate 配置文件（通常是 hibernate.cfg.xml）中声明持久性类：&lt;br /&gt;&amp;lt;!DOCTYPE hibernate-configuration PUBLIC&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "-//Hibernate/Hibernate Configuration DTD 3.0//EN"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&lt;a href="http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&gt;&lt;font color="#015f91"&gt;http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd&lt;/font&gt;&lt;/a&gt;"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;hibernate-configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;session-factory&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;mapping /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;mapping /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/session-factory&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/hibernate-configuration&amp;gt;&lt;br /&gt;　　近期的许多 Java 项目都使用了轻量级的应用框架，例如 Spring。如果您正在使用 Spring 框架，可以使用 &lt;/div&gt;&#xD;
&lt;div&gt;AnnotationSessionFactoryBean 类轻松建立一个基于注释的 Hibernate 会话工厂，如下所示：&lt;br /&gt;&amp;lt;!-- Hibernate session factory --&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;bean id="sessionFactory"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;property name="dataSource"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ref bean="dataSource"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/property&amp;gt;&lt;br /&gt;&lt;font color="#ff0000"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;property name="hibernateProperties"&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;props&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;prop key="hibernate.dialect"&amp;gt;org.hibernate.dialect.DerbyDialect&amp;lt;/prop&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;prop key="hibernate.hbm2ddl.auto"&amp;gt;create&amp;lt;/prop&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/props&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/property&amp;gt;&lt;br /&gt;&lt;font color="#ff0000"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;property name="annotatedClasses"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;list&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;value&amp;gt;com.onjava.modelplanes.domain.PlaneType&amp;lt;/value&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;value&amp;gt;com.onjava.modelplanes.domain.ModelPlane&amp;lt;/value&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/list&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/property&amp;gt;&lt;br /&gt;&amp;lt;/bean&amp;gt; &lt;/div&gt;&#xD;
&lt;div&gt;(3)&lt;br /&gt;&lt;strong&gt;hibernate Annotation标签的使用:&lt;/strong&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;strong&gt;[1]&lt;/strong&gt;&lt;br /&gt;1.带注释的持久性类也是普通 POJO,它们只是具备了持久性注释的普通 POJO 。&lt;/div&gt;&#xD;
&lt;div&gt;2.事实上，您既可以保持字段的持久性（注释写在成员变量之上），也可以保持属性（注释写在getter方法之上）的持久性。&lt;/div&gt;&#xD;
&lt;div&gt;&lt;strong&gt;3.常用的hibernate annotation标签如下:&lt;/strong&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; line-height: 16px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 4px; font-family: verdana, 宋体; color: #000000; font-size: 10pt; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"&gt;&#xD;
&lt;div&gt;&lt;strong&gt;@Entity&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;--注释声明该类为持久类。将一个Javabean类声明为一个实体的数据库表映射类,最好实现序列化.此时,默认情况下,所有的类属性都为映射到数据表的持久性字段.若在类中,添加另外属性,而非映射来数据库的,要用下面的Transient来注解.&lt;/div&gt;&#xD;
&lt;div&gt;&lt;br /&gt;&lt;strong&gt;@Table&lt;/strong&gt;(name=&lt;font color="#800000"&gt;"promotion_info"&lt;/font&gt;)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; --持久性映射的表(表名="promotion_info).@Table是类一级的注解,定义在@Entity下,为实体bean映射表,目录和schema的名字,&lt;font color="#ff0000"&gt;默认为实体bean的类名,不带包名. &lt;/font&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;br /&gt;&lt;strong&gt;@Id&lt;/strong&gt;--注释可以表明哪种属性是该类中的独特标识符(即相当于数据表的主键)。 &lt;br /&gt;&lt;strong&gt;@GeneratedValue&lt;/strong&gt;&amp;nbsp; &amp;nbsp;--定义自动增长的主键的生成策略. &lt;br /&gt;&lt;strong&gt;@Transient&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;--将忽略这些字段和属性,不用持久化到数据库.适用于,在当前的持久类中,某些属性不是用于映射到数据表,而是用于其它的业务逻辑需要,这时,须将这些属性进行transient的注解.否则系统会因映射不到数据表相应字段而出错. &lt;br /&gt;&lt;strong&gt;@Temporal&lt;/strong&gt;(TemporalType.TIMESTAMP)--声明时间格式 &lt;br /&gt;&lt;strong&gt;@Enumerated&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;--声明枚举 &lt;br /&gt;&lt;strong&gt;@Version&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; --声明添加对乐观锁定的支持 &lt;br /&gt;&lt;strong&gt;@OneToOne&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;--可以建立实体bean之间的一对一的关联 &lt;br /&gt;&lt;strong&gt;@OneToMany&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;--可以建立实体bean之间的一对多的关联 &lt;br /&gt;&lt;strong&gt;@ManyToOne&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;--可以建立实体bean之间的多对一的关联 &lt;br /&gt;&lt;strong&gt;@ManyToMany&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;--可以建立实体bean之间的多对多的关联 &lt;br /&gt;&lt;strong&gt;@Formula&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;--一个SQL表达式，这种属性是只读的,不在数据库生成属性(可以使用sum、average、max等) &lt;br /&gt;&lt;strong&gt;@OrderBy&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;--Many端某个字段排序(List)&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;1.2&lt;br /&gt;Hibernate 能够出色地自动生成主键。Hibernate/EBJ 3 注释也可以为主键的自动生成提供丰富的支持，允许实现各种策略。&lt;br /&gt;其生成规则由@GeneratedValue设定的.这里的@id和@GeneratedValue都是JPA的标准用法, JPA提供四种标准用法,由@GeneratedValue的源代码可以明显看出. &lt;br /&gt;JPA提供的四种标准用法为TABLE,SEQUENCE,IDENTITY,AUTO. &lt;br /&gt;TABLE：使用一个特定的数据库表格来保存主键。 &lt;br /&gt;SEQUENCE：根据底层数据库的序列来生成主键，条件是数据库支持序列。 &lt;br /&gt;IDENTITY：主键由数据库自动生成（主要是自动增长型） &lt;br /&gt;AUTO：主键由程序控制。 &lt;br /&gt;&lt;/div&gt;&#xD;
&lt;div&gt;在指定主键时，如果不指定主键生成策略，默认为AUTO。 &lt;br /&gt;@Id&lt;/div&gt;&#xD;
&lt;div&gt;相当于&lt;/div&gt;&#xD;
&lt;div&gt;@Id&lt;br /&gt;@GeneratedValue(strategy = GenerationType.AUTO)&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;identity: &lt;/div&gt;&#xD;
&lt;div&gt;使用SQL Server 和 MySQL 的自增字段，这个方法不能放到 Oracle 中，Oracle 不支持自增字段，要设定sequence（MySQL 和 SQL Server 中很常用）。 &lt;/div&gt;&#xD;
&lt;div&gt;Oracle就要采用sequence了.&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;同时,也可采用uuid,native等其它策略.(相关用法,上网查询)&lt;/div&gt;&#xD;
&lt;div&gt;&lt;strong&gt;[2]&lt;/strong&gt;&lt;/div&gt;&#xD;
&lt;div&gt;第一个持久性类 &lt;br /&gt;&#xD;
&lt;div&gt;&#xD;
&lt;div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; line-height: 16px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 4px; font-family: verdana, 宋体; color: #000000; font-size: 10pt; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"&gt;&#xD;
&lt;div&gt;@Entity &lt;br /&gt;@Table(name=&lt;font color="#800000"&gt;"T_MODEL_PLANE"&lt;/font&gt;) &lt;br /&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt; &lt;font color="#0000ff"&gt;class&lt;/font&gt; ModelPlane&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;implements&lt;/font&gt; Serializable { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Id &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Column(name=&lt;font color="#800000"&gt;"PLANE_ID"&lt;/font&gt;)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@GeneratedValue(strategy=GenerationType.AUTO) &lt;font color="#008000"&gt;//注解于属性中 &lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;/* &lt;br /&gt;对于oracle想使用各自的Sequence,设置如下:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;@GeneratedValue(strategy = GenerationType.AUTO,generator="PROMOTION_SEQ")&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;@SequenceGenerator(name="PROMOTION_SEQ",sequenceName="PROMOTION_SEQ")&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;font color="#008000"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;font color="#008000"&gt;&lt;strong&gt;另外:&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;font color="#008000"&gt;&lt;strong&gt;对于自动增长后,在数据表中的相应字段,要设置字段为auto_increment.&lt;/strong&gt;&lt;br /&gt;*/&lt;/font&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;private&lt;/font&gt; Long id; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;private&lt;/font&gt; String name;&lt;font color="#008000"&gt;//注解写于getter方法之上.请见下. &lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008000"&gt;//DATE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;- java.sql.Date&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008000"&gt;//TIME&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;- java.sql.Time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008000"&gt;//TIMESTAMP - java.sql.Timestamp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Temporal(TemporalType.TIMESTAMP)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name=&lt;font color="#800000"&gt;"start_time"&lt;/font&gt;)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;private&lt;/font&gt; Date startTime;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008000"&gt;//显示0 隐藏1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;public&lt;/font&gt; &lt;font color="#0000ff"&gt;static&lt;/font&gt; &lt;font color="#0000ff"&gt;enum&lt;/font&gt; DisplayType {显示,隐藏}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Enumerated(value = EnumType.ORDINAL)&lt;font color="#008000"&gt;//ORDINAL序数&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;private&lt;/font&gt; DisplayType displayType = DisplayType.显示;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#008000"&gt;//1.sql语句中的字段和表名都应该和数据库相应,而不是类中的字段,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008000"&gt;//若带有参数如la.id= id,这个=id才是类中属性&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008000"&gt;//2.操作字段一定要用别名&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Formula(select COUNT(la.id) from largess la)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;private&lt;/font&gt; &lt;font color="#0000ff"&gt;int&lt;/font&gt; count;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#008000"&gt;//注解于方法中 &lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Column(name=&lt;font color="#800000"&gt;"PLANE_ID"&lt;/font&gt;, length=80, nullable=&lt;font color="#0000ff"&gt;true&lt;/font&gt;) &lt;font color="#008000"&gt;//较详细定义 &lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;public&lt;/font&gt; String getName() { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;return&lt;/font&gt; name; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;public&lt;/font&gt; &lt;font color="#0000ff"&gt;void&lt;/font&gt; setName(String name) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;this&lt;/font&gt;.name = name; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;其它的setter,getter省略...... &lt;br /&gt;} &lt;/div&gt;&#xD;
&lt;div&gt;&lt;br /&gt;该内容将映射到下表中： &lt;br /&gt;CREATE TABLE T_MODEL_PLANE &lt;br /&gt;( &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PLANE_ID &lt;font color="#0000ff"&gt;long&lt;/font&gt;, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PLANE_NAME varchar &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;其它字段省略... &lt;br /&gt;)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;font color="#ff0000"&gt;默认情况下，Hibernate 会将持久类以匹配的名称映射到表和字段中。例如，下例中，若不用注解，则会映射到如下一表中：&lt;/font&gt;&lt;br /&gt;CREATE TABLE MODELPLANE&lt;br /&gt;(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ID long,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; NAME varchar&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 其它字段省略...&lt;br /&gt;) &lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;strong&gt;[3]&lt;/strong&gt;&lt;br /&gt;一对多注解:&lt;/div&gt;&#xD;
&lt;div&gt;1.&lt;/div&gt;&#xD;
&lt;div&gt;在一对多注解中,会用到:&lt;/div&gt;&#xD;
&lt;div&gt;"一"方：&lt;br /&gt;@OneToMany --&amp;gt; mappedBy:"多"方的关联属性&lt;strong&gt;(被控方)&lt;/strong&gt;&lt;br /&gt;"多"方：&lt;br /&gt;@ManyToOne --&amp;gt; @JoinColumn，"多"方定义的外键字段.&lt;/div&gt;&#xD;
&lt;div&gt;如数据表定义外键如下:&lt;/div&gt;&#xD;
&lt;div&gt;&lt;font color="#008000"&gt;FOREIGN KEY (classid) REFERENCES classes(id)&lt;/font&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;font color="#008000"&gt;则:&lt;/font&gt;&lt;/div&gt;&#xD;
&lt;div&gt;@JoinColumn(name=&lt;font color="#800000"&gt;"classid"&lt;/font&gt;)&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;2.&lt;/div&gt;&#xD;
&lt;div&gt;在双向关联中，有且仅有一端作为主体（owner）端存在：主体端负责维护联接列（即更新），对于不需要维护这种关系的从表则通过mappedNy属性进行声明。mappedBy的值指向另一主体的关联属性。例子中，mappedBy的值为classes。&lt;/div&gt;&#xD;
&lt;div&gt;&lt;strong&gt;附加说明:&lt;/strong&gt;&lt;/div&gt;&#xD;
&lt;div&gt;mappedBy相当于过去的inverse="true".&lt;br /&gt;inverse=false的side（side其实是指inverse＝false所位于的class元素）端有责任维护关系，而inverse＝true端无须维护这些关系。&lt;/div&gt;&#xD;
&lt;div&gt;3.&lt;/div&gt;&#xD;
&lt;div&gt;&lt;strong&gt;cascade与fetch使用说明:&lt;/strong&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;strong&gt;Cascade&lt;/strong&gt;&lt;/div&gt;&#xD;
&lt;div&gt;CascadeType.PERSIST （级联新建） &lt;br /&gt;CascadeType.REMOVE&amp;nbsp; （级联删除） &lt;br /&gt;CascadeType.REFRESH （级联刷新） &lt;br /&gt;CascadeType.MERGE&amp;nbsp;&amp;nbsp; （级联更新）中选择一个或多个。 &lt;br /&gt;CascadeType.ALL&lt;/div&gt;&#xD;
&lt;div&gt;&lt;strong&gt;&amp;nbsp;fetch属性：&lt;/strong&gt;&lt;/div&gt;&#xD;
&lt;div&gt;关联关系获取方式,即是否采用延时加载。&lt;br /&gt;&amp;nbsp;LAZY（默认值）采用延时加载，查询数据时，不一起查询关联对象的数据。而是当访问关联对象时(如：getStudnets()时)才触发相应的查询操作，获取关联对象数据。&lt;br /&gt;EAGER：是在查询数据时，也直接一起获取关联对象的数据。&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; line-height: 16px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 4px; font-family: verdana, 宋体; color: #000000; font-size: 10pt; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"&gt;&#xD;
&lt;div&gt;&lt;font color="#0000ff"&gt;package&lt;/font&gt; oneToMany; &lt;br /&gt;&lt;font color="#0000ff"&gt;import&lt;/font&gt; java.util.Set; &lt;br /&gt;&lt;font color="#0000ff"&gt;import&lt;/font&gt; javax.persistence.*; &lt;br /&gt;&lt;font color="#008000"&gt;/* &lt;br /&gt;注意导入时，是导入：import javax.persistence.*;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;非导入org.hibernate的相关类：import org.hibernate.annotations.Entity; &lt;br /&gt;*/&lt;/font&gt; &lt;br /&gt;@Entity &lt;br /&gt;@Table(name=&lt;font color="#800000"&gt;"classes"&lt;/font&gt;) &lt;br /&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt; &lt;font color="#0000ff"&gt;class&lt;/font&gt; Classes &lt;font color="#0000ff"&gt;implements&lt;/font&gt; Serializable { &lt;br /&gt;&amp;nbsp;&amp;nbsp;@Id &lt;br /&gt;&amp;nbsp;&amp;nbsp;@GeneratedValue(strategy=GenerationType.AUTO) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;private&lt;/font&gt; &lt;font color="#0000ff"&gt;int&lt;/font&gt; id; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;private&lt;/font&gt; String name; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;@OneToMany(cascade=CascadeType.ALL,mappedBy=&lt;font color="#800000"&gt;"classes"&lt;/font&gt;)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;private&lt;/font&gt; Set&amp;lt;Student&amp;gt; students; &lt;br /&gt;&lt;font color="#008000"&gt;//getter,setter省略 &lt;/font&gt;&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;package&lt;/font&gt; oneToMany; &lt;br /&gt;&lt;font color="#0000ff"&gt;import&lt;/font&gt; javax.persistence.*; &lt;br /&gt;@Entity &lt;br /&gt;@Table(name=&lt;font color="#800000"&gt;"student"&lt;/font&gt;) &lt;br /&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt; &lt;font color="#0000ff"&gt;class&lt;/font&gt; Student &lt;font color="#0000ff"&gt;implements&lt;/font&gt; Serializable&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;@Id &lt;br /&gt;&amp;nbsp;&amp;nbsp;@GeneratedValue(strategy=GenerationType.AUTO) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;private&lt;/font&gt; &lt;font color="#0000ff"&gt;int&lt;/font&gt; sid; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;private&lt;/font&gt; String sname; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#008000"&gt;//若有多个cascade，可以是：{CascadeType.PERSIST,CascadeType.MERGE} &lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;@ManyToOne(cascade={CascadeType.ALL})&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;@JoinColumn(name=&lt;font color="#800000"&gt;"classid"&lt;/font&gt;)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008000"&gt;//student类中对应外键的属性：classid &lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;private&lt;/font&gt; Classes classes; &lt;br /&gt;&lt;font color="#008000"&gt;//getter,setter省略 &lt;/font&gt;&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt; &lt;font color="#0000ff"&gt;class&lt;/font&gt; TestOneToMany { &lt;br /&gt;&lt;font color="#008000"&gt;/* &lt;br /&gt;CREATE TABLE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;student (&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;--要定义外键!!!!!!! &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;`sid` double NOT NULL auto_increment, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;`classid` double NULL, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;`sname` varchar(255) NOT NULL, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PRIMARY KEY&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(sid), &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;INDEX par_ind (classid), &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FOREIGN KEY (classid) REFERENCES classes(id) ON DELETE CASCADE ON UPDATE CASCADE &lt;br /&gt;) ENGINE=InnoDB &lt;br /&gt;*/&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;public&lt;/font&gt; &lt;font color="#0000ff"&gt;static&lt;/font&gt; &lt;font color="#0000ff"&gt;void&lt;/font&gt; main(String[] args) &lt;font color="#0000ff"&gt;throws&lt;/font&gt; SQLException&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;try&lt;/font&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SessionFactory sf = &lt;font color="#0000ff"&gt;new&lt;/font&gt; AnnotationConfiguration().configure().buildSessionFactory(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Session session=sf.openSession(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Transaction tx=session.beginTransaction();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;/*&lt;/div&gt;&#xD;
&lt;div&gt;因为mappedBy是定义在classes中,即classes类不负责维护级联关系.即维护者是student.所以,&lt;/div&gt;&#xD;
&lt;div&gt;1.要将clsses的数据,赋给student,即用student的setClasses()方法去捆定class数据;&lt;/div&gt;&#xD;
&lt;div&gt;2.在进行数据插入/更新session.save()/session.update()时,最后操作的是student.&lt;/div&gt;&#xD;
&lt;div&gt;*/&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Classes classes=&lt;font color="#0000ff"&gt;new&lt;/font&gt; Classes(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;classes.setName(&lt;font color="#800000"&gt;"access"&lt;/font&gt;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Student st1=&lt;font color="#0000ff"&gt;new&lt;/font&gt; Student(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;st1.setSname(&lt;font color="#800000"&gt;"jason"&lt;/font&gt;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;st1.setClasses(classes); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;session.save(st1); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Student st2=&lt;font color="#0000ff"&gt;new&lt;/font&gt; Student(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;st2.setSname(&lt;font color="#800000"&gt;"hwj"&lt;/font&gt;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;st2.setClasses(classes); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;session.save(st2);&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tx.commit();&lt;/div&gt;&#xD;
&lt;div&gt;/*&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;div&gt;&lt;strong&gt;输出如下:&lt;/strong&gt;&lt;/div&gt;&#xD;
&lt;div&gt;Hibernate: insert into classes (name) values (?)&lt;br /&gt;Hibernate: insert into student (classid, sname) values (?, ?)&lt;br /&gt;Hibernate: insert into student (classid, sname) values (?, ?)&lt;/div&gt;&#xD;
&lt;div&gt;&lt;font color="#008000"&gt;*/&lt;/font&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div&gt;/*&lt;/div&gt;&#xD;
&lt;div&gt;&lt;font color="#ff0000"&gt;因为一端维护关系另一端不维护关系的原因，我们必须注意避免在应用中用不维护关系的类(class)建立关系，因为这样建立的关系是不会在数据库中存储的。&lt;/font&gt;&lt;/div&gt;&#xD;
&lt;div&gt;如上的代码倒过来,则插入时,student的外键值为空.如下:&lt;/div&gt;&#xD;
&lt;div&gt;*/&lt;/div&gt;&#xD;
&lt;div&gt;&lt;font color="#008000"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Student st1=new Student(); &lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;st1.setSname("jason"); &lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;session.save(st1); &lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Student st2=new Student(); &lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;st2.setSname("hwj"); &lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;session.save(st2); &lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Set&amp;lt;Student&amp;gt; students=new HashSet&amp;lt;Student&amp;gt;(); &lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;students.add(st1); &lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;students.add(st2); &lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Classes classes=new Classes(); &lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;classes.setName("access"); &lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;classes.setStudents(students); &lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;session.save(classes);&amp;nbsp;&lt;/font&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;font color="#008000"&gt;/*&lt;/font&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;strong&gt;输出如下:&lt;/strong&gt;&lt;br /&gt;Hibernate: insert into student (classid, sname) values (?, ?)&lt;br /&gt;Hibernate: insert into student (classid, sname) values (?, ?)&lt;/div&gt;&#xD;
&lt;div&gt;Hibernate: insert into classes (name) values (?)&lt;/div&gt;&#xD;
&lt;div&gt;&lt;font color="#008000"&gt;*/&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;catch&lt;/font&gt;(HibernateException e) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e.printStackTrace();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;}&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;strong&gt;[4]&lt;br /&gt;&lt;/strong&gt;多对多注解:&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;在多对多注解中,双方都采用@ManyToMany.&lt;/div&gt;&#xD;
&lt;div&gt;其中被控方,像一对多注解中设置一样,也要设置mappedBy.&lt;/div&gt;&#xD;
&lt;div&gt;其中主控方,不像一对多注解那样,采用@joinColumn,而是采用@joinTable.如下:&lt;/div&gt;&#xD;
&lt;div&gt;@JoinTable(name="j_student_course" ,joinColumns={@JoinColumn(name="sid")},inverseJoinColumns={@JoinColumn(name="cid")})&lt;/div&gt;&#xD;
&lt;div&gt;其中,&lt;/div&gt;&#xD;
&lt;div&gt;如上所说,mappedBy,相当于inverse="true".所以,在@joinTable中的inverseJoinColumns中定义的字段为mappedBy所在类的主键.&lt;br /&gt;joinColumns定义的字段,就是当前类的主键.&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; line-height: 16px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 4px; font-family: verdana, 宋体; color: #000000; font-size: 10pt; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"&gt;@Entity &lt;br /&gt;@Table(name=&lt;font color="#800000"&gt;"jcourse"&lt;/font&gt;) &lt;br /&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt; &lt;font color="#0000ff"&gt;class&lt;/font&gt; Jcourse { &lt;br /&gt;&amp;nbsp;&amp;nbsp;@Id &lt;br /&gt;&amp;nbsp;&amp;nbsp;@GeneratedValue(strategy=GenerationType.AUTO) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;private&lt;/font&gt; &lt;font color="#0000ff"&gt;int&lt;/font&gt; cid; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;private&lt;/font&gt; String cname; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;@ManyToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE},fetch=FetchType.LAZY ,mappedBy=&lt;font color="#800000"&gt;"courses"&lt;/font&gt;) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;private&lt;/font&gt; Set&amp;lt;Jstudent&amp;gt; students; &lt;br /&gt;&lt;font color="#008000"&gt;//setter,getter省略....&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@Entity &lt;br /&gt;@Table(name=&lt;font color="#800000"&gt;"jstudent"&lt;/font&gt;) &lt;br /&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt; &lt;font color="#0000ff"&gt;class&lt;/font&gt; Jstudent { &lt;br /&gt;&amp;nbsp;&amp;nbsp;@Id &lt;br /&gt;&amp;nbsp;&amp;nbsp;@GeneratedValue(strategy=GenerationType.AUTO) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;private&lt;/font&gt; &lt;font color="#0000ff"&gt;int&lt;/font&gt; sid; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;private&lt;/font&gt; String sname; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;@ManyToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE},fetch=FetchType.EAGER) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#008000"&gt;//inverseJoinColumns中对应的id为以下属性course的对应id. &lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;@JoinTable(name=&lt;font color="#800000"&gt;"j_student_course"&lt;/font&gt; ,joinColumns={@JoinColumn(name=&lt;font color="#800000"&gt;"sid"&lt;/font&gt;)},inverseJoinColumns={@JoinColumn(name=&lt;font color="#800000"&gt;"cid"&lt;/font&gt;)}) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;private&lt;/font&gt; Set&amp;lt;Jcourse&amp;gt; courses; &lt;br /&gt;&lt;font color="#008000"&gt;//setter,getter省略....&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt; &lt;font color="#0000ff"&gt;class&lt;/font&gt; Test { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;public&lt;/font&gt; &lt;font color="#0000ff"&gt;static&lt;/font&gt; &lt;font color="#0000ff"&gt;void&lt;/font&gt; main(String[] args) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;try&lt;/font&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SessionFactory sf = &lt;font color="#0000ff"&gt;new&lt;/font&gt; AnnotationConfiguration().configure().buildSessionFactory(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Session session=sf.openSession(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Transaction tx=session.beginTransaction(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Jcourse course=&lt;font color="#0000ff"&gt;new&lt;/font&gt; Jcourse(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;course.setCname(&lt;font color="#800000"&gt;"jason-english"&lt;/font&gt;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;session.save(course); &lt;font color="#008000"&gt;//先各自保存. &lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Jcourse course2=&lt;font color="#0000ff"&gt;new&lt;/font&gt; Jcourse(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;course2.setCname(&lt;font color="#800000"&gt;"herry-english"&lt;/font&gt;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;session.save(course2); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Set&amp;lt;Jcourse&amp;gt; courses=&lt;font color="#0000ff"&gt;new&lt;/font&gt; HashSet&amp;lt;Jcourse&amp;gt;(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;courses.add(course); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;courses.add(course2); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Jstudent student=&lt;font color="#0000ff"&gt;new&lt;/font&gt; Jstudent(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;student.setSname(&lt;font color="#800000"&gt;"jason"&lt;/font&gt;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;student.setCourses(courses); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;session.save(student);&lt;font color="#008000"&gt;// 要用非mapby定义的类(studet)来作为主者(会控制级联关系),一对多,多对一也一样道理. &lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#008000"&gt;//可以尝试反过来. &lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tx.commit(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;catch&lt;/font&gt;(HibernateException e) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e.printStackTrace();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;}&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;附件下载：&lt;/strong&gt;&lt;br /&gt;　&lt;a href="http://www.cnblogs.com/EricGu/admin/downattach.php?id=19944&amp;amp;k=15399b3a52c9763a0259187a29876cf7&amp;amp;t=1288923367" target="_blank"&gt;&lt;font color="#015f91"&gt;annocation-jar01.rar&lt;/font&gt;&lt;/a&gt;&lt;br /&gt;　&lt;font color="#015f91"&gt;annocation-jar02.rar&lt;/font&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/EricGu/aggbug/1869717.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/EricGu/archive/2010/11/05/1869717.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/EricGu/archive/2010/10/14/1851522.html</id><title type="text">Groovy和Grails配置方法</title><summary type="text">因为Groovy是运行在Java虚拟机上的脚本语言，所以嘛，安装Java虚拟机也就成了我们的首要任务。一、下载和安装Java虚拟机1、下载Jdk最新的jdk为1.6.10，可以从官方去下载http://www.java.net/download/jdk6/6u10/promoted/b32/binaries/jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_20...</summary><published>2010-10-14T08:53:00Z</published><updated>2010-10-14T08:53:00Z</updated><author><name>EricGu</name><uri>http://www.cnblogs.com/EricGu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/EricGu/archive/2010/10/14/1851522.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/EricGu/archive/2010/10/14/1851522.html"/><content type="html">&lt;div&gt;因为Groovy是运行在Java虚拟机上的脚本语言，所以嘛，安装Java虚拟机也就成了我们的首要任务。&lt;/div&gt;&#xD;
&lt;div style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt"&gt;&lt;span&gt;一、&lt;/span&gt;下载和安装Java虚拟机&lt;/div&gt;&#xD;
&lt;div style="text-indent: -18pt; margin: 0cm 0cm 0pt 39pt"&gt;&lt;span&gt;1、&amp;nbsp;&lt;/span&gt;下载Jdk&lt;/div&gt;&#xD;
&lt;div style="margin: 0cm 0cm 0pt 39pt"&gt;最新的jdk为1.6.10，可以从官方去下载&lt;/div&gt;&#xD;
&lt;div style="margin: 0cm 0cm 0pt 39pt"&gt;&lt;span style="color: black"&gt;&lt;a href="http://www.java.net/download/jdk6/6u10/promoted/b32/binaries/jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.exe" target="_blank"&gt;&lt;span style="color: blue"&gt;http://www.java.net/download/jdk6/6u10/promoted/b32/binaries/jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.exe&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div style="text-indent: -18pt; margin: 0cm 0cm 0pt 39pt"&gt;&lt;span&gt;2、&amp;nbsp;&lt;/span&gt;配置环境变量&lt;/div&gt;&#xD;
&lt;div style="margin: 0cm 0cm 0pt 39pt"&gt;安装Jdk1.6以后，需要&lt;strong&gt;&lt;span style="font-weight: normal"&gt;配置&lt;/span&gt;-&amp;gt;属性-&amp;gt;高级-&amp;gt;环境变量-&amp;gt;系统变量中添加以下环境变量(假定你的Jdk安装在C:\Jdk1.6）： &lt;span style="font-size: 10pt"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red"&gt;JAVA_HOME&lt;/span&gt;= C:\Jdk1.6 &lt;span style="font-size: 10pt"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red"&gt;classpath&lt;/span&gt;=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;（.;一定不能少，因为它代表当前路径) &lt;span style="font-size: 10pt"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red"&gt;path&lt;/span&gt;=%JAVA_HOME%\bin&lt;/strong&gt;一下环境变量，在我的电脑&lt;/div&gt;&#xD;
&lt;div style="text-indent: -18pt; margin: 0cm 0cm 0pt 39pt"&gt;&lt;span&gt;3、&amp;nbsp;&lt;/span&gt;测试JVM安装是否正常&lt;/div&gt;&#xD;
&lt;div style="margin: 0cm 0cm 0pt 39pt"&gt;在开始-&amp;gt;运行中输入cmd然后回车，在DOS窗口下输入java &amp;#8211;version,如果显示类似如下，表示Jdk安装成功:&lt;/div&gt;&#xD;
&lt;div style="text-indent: 36.75pt"&gt;C:\Documents and Settings\xp&amp;gt;java -version&lt;/div&gt;&#xD;
&lt;div style="text-indent: 36.75pt"&gt;java version "1.6.0_10"&lt;/div&gt;&#xD;
&lt;div style="text-indent: 36.75pt"&gt;Java(TM) SE Runtime Environment (build 1.6.0_10-b12)&lt;/div&gt;&#xD;
&lt;div style="text-indent: 36.75pt"&gt;Java HotSpot(TM) Client VM (build 10.0-b19, mixed mode, sharing)&lt;/div&gt;&#xD;
&lt;div style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt"&gt;&lt;span&gt;二、&lt;/span&gt;下载和安装Grails&lt;/div&gt;&#xD;
&lt;div style="margin: 0cm 0cm 0pt 21pt"&gt;Java Web应用程序框架是企业&lt;span&gt;Java得以成功的重要原因之一。人们怀疑如果没有Apache Struts框架Java EE是否能够如此成功。虽然底层编程语言很重要，但通常是框架使编程语言成为引人注目的中心的。如果您经常访问讨论论坛，就会注意到Ruby语言和Ruby On Rails框架之间也是这种情况。Ruby已经出现十多年了，然而只是在Ruby On Rails框架流行之后，开发人员才开始注意到Ruby语言。 &#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;诸如Ruby、PHP和Python之类的脚本语言最近几年越来越流行，因此，需要开发一个Java脚本备选语言和类似Rails的针对Java环境的框架。Groovy就是这个脚本语言，而Grails就是这个框架。&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&#xD;
&lt;div style="text-indent: -18pt; margin: 0cm 0cm 0pt 39pt"&gt;&lt;span&gt;1、&amp;nbsp;&lt;/span&gt;下载Grails&lt;/div&gt;&#xD;
&lt;div style="margin: 0cm 0cm 0pt 39pt"&gt;最新的Grails版本是1.0.4，可以从以下链接下载：&lt;/div&gt;&#xD;
&lt;div style="margin: 0cm 0cm 0pt 39pt"&gt;http://dist.codehaus.org/grails/grails-bin-1.0.4.zip&lt;/div&gt;&#xD;
&lt;div style="text-indent: -18pt; margin: 0cm 0cm 0pt 39pt"&gt;&lt;span&gt;2、&amp;nbsp;&lt;/span&gt;配置环境变量&lt;/div&gt;&#xD;
&lt;div style="margin: 0cm 0cm 0pt 39pt"&gt;将下载完的grails-bin-1.0.4.zip解压缩到C:\ grails-1.0.4目录下&lt;/div&gt;&#xD;
&lt;div style="margin: 0cm 0cm 0pt 39pt"&gt;Windows系统上右击&amp;#8220;我的电脑&amp;#8221;/&amp;#8220;属性&amp;#8221;/&amp;#8220;高级&amp;#8221;/&amp;#8220;环境变量&amp;#8221;，点击新建环境变量GRAILS_HOME，值为C:\ grails-1.0.4&lt;/div&gt;&#xD;
&lt;div style="margin: 0cm 0cm 0pt 39pt"&gt;Windows系统上右击&amp;#8220;我的电脑&amp;#8221;/&amp;#8220;属性&amp;#8221;/&amp;#8220;高级&amp;#8221;/&amp;#8220;环境变量&amp;#8221;，修改path的值，在最后面增加%GRAILS_HOME%\bin;&lt;/div&gt;&#xD;
&lt;div style="text-indent: -18pt; margin: 0cm 0cm 0pt 39pt"&gt;&lt;span&gt;3、&amp;nbsp;&lt;/span&gt;测试Grails安装是否正常&lt;/div&gt;&#xD;
&lt;div style="margin: 0cm 0cm 0pt 39pt"&gt;打开window命令提示符窗口，输入grails&lt;/div&gt;&#xD;
&lt;div style="margin: 0cm 0cm 0pt 17.95pt"&gt;C:\Documents and Settings\xp&amp;gt;grails&lt;/div&gt;&#xD;
&lt;div style="margin: 0cm 0cm 0pt 17.95pt"&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div style="margin: 0cm 0cm 0pt 17.95pt"&gt;Welcome to Grails 1.0.4 &amp;#8211; http://grails.org/&lt;/div&gt;&#xD;
&lt;div style="margin: 0cm 0cm 0pt 17.95pt"&gt;Licensed under Apache Standard License 2.0&lt;/div&gt;&#xD;
&lt;div style="margin: 0cm 0cm 0pt 17.95pt"&gt;Grails home is set to: c:\grails-1.0.4&lt;/div&gt;&#xD;
&lt;div style="margin: 0cm 0cm 0pt 17.95pt"&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div style="margin: 0cm 0cm 0pt 17.95pt"&gt;No script name specified. Use &amp;#8216;grails help&amp;#8217; for more info or &amp;#8216;grails interactive&lt;/div&gt;&#xD;
&lt;div style="margin: 0cm 0cm 0pt 39pt"&gt;&amp;#8216; to enter interactive mode&lt;/div&gt;&#xD;
&lt;div style="margin: 0cm 0cm 0pt 39pt"&gt;测试成功！！&lt;/div&gt;&#xD;
&lt;div style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt"&gt;&lt;span&gt;三、&lt;/span&gt;下载和安装Groovy&lt;/div&gt;&#xD;
&lt;div style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Groovy&lt;/span&gt;是什么？ &#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Groovy是一种语言，其语法类似于Java，但比Java更简单。它通常被视为脚本/灵活/动态的语言，但是我不喜欢这类形容词，因为我认为它们只会令人困惑。如果说Java是一位明智的中年男子，那么Groovy就是他十几岁的儿子。Groovy具有父亲的许多特点，但是更为狂野且更为有趣。他们也可以很好地合作。&lt;/p&gt;&#xD;
&lt;p&gt;Groovy的规则比Java少得多。例如，要在Java中获得标准的"Hello World"输出，您需要编写一个类、一个具有合适参数的主方法，等等。但是在Groovy中，如果不想编写所有样板代码，您可以抛开类定义和主方法，仅编写一行代码即可打印出"Hello World"。&lt;/p&gt;&#xD;
&lt;p&gt;以下是打印Hello&amp;nbsp;World的文件&amp;nbsp;Hello.groovy的内容：&lt;/p&gt;&#xD;
&lt;p&gt;println "Hello World"&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/EricGu/aggbug/1851522.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/EricGu/archive/2010/10/14/1851522.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/EricGu/archive/2010/02/10/1666952.html</id><title type="text">Log4net的用法</title><summary type="text">最近才发现Log4net是这么的强大，我看了些帖子，这里贴出来，便于后期回忆。http://fineboy.cnblogs.com/archive/2005/08/15/215478.html这个帖子能非常快的让你知道Log4net的简单用法和基本意思。如果需要对日志进行深入了解，则需要看下下面的帖子http://dragon.cnblogs.com/archive/2005/03/24/1242...</summary><published>2010-02-10T01:47:00Z</published><updated>2010-02-10T01:47:00Z</updated><author><name>EricGu</name><uri>http://www.cnblogs.com/EricGu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/EricGu/archive/2010/02/10/1666952.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/EricGu/archive/2010/02/10/1666952.html"/></entry><entry><id>http://www.cnblogs.com/EricGu/archive/2010/01/15/1648625.html</id><title type="text">在vs2008中设置jquery智能提示</title><summary type="text">1 要确保您的vs2008已经打了sp1补丁，可以点击这里下载 2下载 jQuery-vsdoc.js ，如果您安装了asp.net mvc ，可以在mvc的项目下的srcipts目下找到，或是点击这里下载。 3 下载安装一个vs2008支持 -vsdoc.js 智能提示的一个补丁 ，可以点击这里下载4 准备工作已经做完，现在就可以来试试jquery的智能提示了，用vs2008新建一个项目，在页面...</summary><published>2010-01-15T07:27:00Z</published><updated>2010-01-15T07:27:00Z</updated><author><name>EricGu</name><uri>http://www.cnblogs.com/EricGu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/EricGu/archive/2010/01/15/1648625.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/EricGu/archive/2010/01/15/1648625.html"/></entry><entry><id>http://www.cnblogs.com/EricGu/archive/2009/12/16/1625655.html</id><title type="text">开发人员最喜爱的十大免费的Visual Studio插件</title><summary type="text">1. AnkhSVN - Subversion SCC Providerhttp://ankhsvn.open.collab.net/AnkhSVN是一个VS的Subversion 源代码管理提供者。通过这个插件,你可以方便的在Visual Studio中使用Subversion管理你的项目和代码。这个项目保持着相当的活跃性。在本文发表时最新的版本是2.1.7444。强烈推荐开发者使用，尤其是你将...</summary><published>2009-12-16T07:40:00Z</published><updated>2009-12-16T07:40:00Z</updated><author><name>EricGu</name><uri>http://www.cnblogs.com/EricGu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/EricGu/archive/2009/12/16/1625655.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/EricGu/archive/2009/12/16/1625655.html"/></entry><entry><id>http://www.cnblogs.com/EricGu/archive/2009/12/15/1624775.html</id><title type="text">优化JavaScript代码</title><summary type="text">我google一下,已有人翻译了此文.感觉比我翻译的要好!是译言站翻译的见www.yeeyan.com/articles/view/92135/47626/dz原文见:http://code.google.com/intl/zh-CN/speed/articles/optimizing-javascript.html不合适的地方,请大家指出来!希望对你有用! 优化JavaScript代码(Opti...</summary><published>2009-12-15T06:25:00Z</published><updated>2009-12-15T06:25:00Z</updated><author><name>EricGu</name><uri>http://www.cnblogs.com/EricGu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/EricGu/archive/2009/12/15/1624775.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/EricGu/archive/2009/12/15/1624775.html"/></entry><entry><id>http://www.cnblogs.com/EricGu/archive/2009/12/15/1624755.html</id><title type="text">Velocity快速指南</title><summary type="text">什么是Velocity?Velocity是一个基于Java的模板引擎，它可以使得前端的开发者轻松的引用后端Java代码中定义的方法。前端和后端的开发可以根据MVC模型并行的进行，这意味着Web开发工程师们可以更关注于自己的事情，并使得Web具有更好的可维护性。Velocity模板使用VTL(Velocity模板语言)编写。简单例子这是一个最简单的例子，使用set指令定义了一个变量foo，变量以&amp;#...</summary><published>2009-12-15T06:08:00Z</published><updated>2009-12-15T06:08:00Z</updated><author><name>EricGu</name><uri>http://www.cnblogs.com/EricGu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/EricGu/archive/2009/12/15/1624755.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/EricGu/archive/2009/12/15/1624755.html"/></entry><entry><id>http://www.cnblogs.com/EricGu/archive/2009/11/10/1599649.html</id><title type="text">配置nhibernate时报 No persister for: NH.Model.Entities.Customer 异常</title><summary type="text">[代码]若果采用App.config配置，则必须加&amp;lt;mapping assembly="NH.Model"/&amp;gt;来映射你的实体层。</summary><published>2009-11-10T03:33:00Z</published><updated>2009-11-10T03:33:00Z</updated><author><name>EricGu</name><uri>http://www.cnblogs.com/EricGu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/EricGu/archive/2009/11/10/1599649.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/EricGu/archive/2009/11/10/1599649.html"/></entry><entry><id>http://www.cnblogs.com/EricGu/archive/2009/11/09/1598948.html</id><title type="text">解决UpdatePanle中执行后台时间密码域丢失问题</title><summary type="text">[代码]原因：将这个Textbox与其他的Textbox放在同一个UpdatePanel中了。这样互相有影响。解决：把其单独放一个UpdatePanel中即可解决。</summary><published>2009-11-09T04:39:00Z</published><updated>2009-11-09T04:39:00Z</updated><author><name>EricGu</name><uri>http://www.cnblogs.com/EricGu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/EricGu/archive/2009/11/09/1598948.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/EricGu/archive/2009/11/09/1598948.html"/></entry></feed>
