﻿<?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-hurry up or you will be lost-随笔分类-Hibernate</title><link>http://www.blogjava.net/hejian811/category/15046.html</link><description>努力去发掘自己的潜能 去追逐</description><language>zh-cn</language><lastBuildDate>Sun, 30 Sep 2007 05:18:59 GMT</lastBuildDate><pubDate>Sun, 30 Sep 2007 05:18:59 GMT</pubDate><ttl>60</ttl><item><title>终于把hibernate调通了,一个简单的入门例子</title><link>http://www.blogjava.net/hejian811/archive/2007/09/29/149664.html</link><dc:creator>^小^齐^</dc:creator><author>^小^齐^</author><pubDate>Sat, 29 Sep 2007 11:17:00 GMT</pubDate><guid>http://www.blogjava.net/hejian811/archive/2007/09/29/149664.html</guid><wfw:comment>http://www.blogjava.net/hejian811/comments/149664.html</wfw:comment><comments>http://www.blogjava.net/hejian811/archive/2007/09/29/149664.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/hejian811/comments/commentRss/149664.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hejian811/services/trackbacks/149664.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="font-family: 宋体">&nbsp; 花了小半天，终于把一个简单的</span>hibernate<span style="font-family: 宋体">程序搞通了，成功的向数据库中添加了数据。现在冷静下来想一下，其实也挺简单的，但在具体的过程中自己出了不少的错误，究其原因有二：其一是自己从网上找了一些程序，但没有理解其根本意思就开始照着上面的代码编写，结果编写出来的大多不能正常运行；其二是由于公司只提供</span>eclipse<span style="font-family: 宋体">开发工具，没有</span>myeclipse<span style="font-family: 宋体">插件，所以开发</span>hibernate, struts<span style="font-family: 宋体">框架的时候就很不方便。我采用</span>hibernate Synchronizer<span style="font-family: 宋体">插件来进行开发。因为在有许多同行都推荐它，但具体怎么样，我现在还不好说，毕竟刚开始用这个插件。若想了解</span>hibernate Synchronizer<span style="font-family: 宋体">的特性，网上</span>google<span style="font-family: 宋体">一下，多的是。</span></p>
<p><span style="font-family: 宋体">好了，现在具体来说说这个简单的例子。</span></p>
<p><span style="font-family: 宋体">首先，需要具备以下条件；</span></p>
<p>1<span style="font-family: 宋体">：</span>eclipse 3.2<span style="font-family: 宋体">或者其它版本。此文所采用的是</span>3.2<span style="font-family: 宋体">英文版。</span></p>
<p>2<span style="font-family: 宋体">：</span>Mysql <span style="font-family: 宋体">数据库以及驱动程序</span>.jar<span style="font-family: 宋体">文件。</span></p>
<p>3<span style="font-family: 宋体">：</span>hibernate Synchronizer<span style="font-family: 宋体">插件。可从</span>sourcefourge<span style="font-family: 宋体">上下载。</span></p>
<p>4<span style="font-family: 宋体">：</span>hibernate<span style="font-family: 宋体">文件包，里面包括所有的</span>jar<span style="font-family: 宋体">文件。</span></p>
<p><span style="font-family: 宋体">第二：在</span>MYSQL<span style="font-family: 宋体">中建立一个测试数据库，名为</span>test<span style="font-family: 宋体">。并建立一个数据表</span>person:</p>
<p>use test;</p>
<p>create table person(</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID int auto_increment primary key,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Name char(10),</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sex char(1),</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Address char(20));</p>
<span style="font-size: 10.5pt; font-family: 宋体">第三，在</span><span style="font-size: 10.5pt; font-family: Century">eclipse</span><span style="font-size: 10.5pt; font-family: 宋体">中新建一个</span><span style="font-size: 10.5pt; font-family: Century">java project</span><span style="font-size: 10.5pt; font-family: 宋体">。命名为</span><span style="font-size: 10.5pt; font-family: Century">hibernateTest</span><span style="font-size: 10.5pt; font-family: 宋体">。并导入</span><span style="font-size: 10.5pt; font-family: Century">JRE</span><span style="font-size: 10.5pt; font-family: 宋体">文件.<br />
&nbsp;
<p><span style="font-family: 宋体">第四，右键单击已经建立好的</span>JAVA<span style="font-family: 宋体">工程，将</span>hibernate<span style="font-family: 宋体">和</span>mysql<span style="font-family: 宋体">的</span>.jar<span style="font-family: 宋体">文件导入到工程中。具体操作：右键单击工程</span>-&gt;Build path-&gt;Configure build path-&gt;add external JARS <span style="font-family: 宋体">导入</span>hibernate<span style="font-family: 宋体">和</span>mysql<span style="font-family: 宋体">的相关</span>jar<span style="font-family: 宋体">文件。至此我们已经搭建好了开发环境，下一步开始进行实际开发。</span></p>
<p><span style="font-family: 宋体">第五，右键单击工程，选择</span>new--&gt;other--&gt;hibernate--&gt;hibernate configure file,<span style="font-family: 宋体">在弹出窗口中填入相应内容，</span>eclipse<span style="font-family: 宋体">将会自动生成</span>hibernate<span style="font-family: 宋体">的</span>configure <span style="font-family: 宋体">文件。在弹出的窗口中也可以选择数据源配置方式，方法只要在窗口在</span>connection<span style="font-family: 宋体">项中选择</span>database<span style="font-family: 宋体">便可。有兴趣的可以自己试试看。</span></p>
<p><span style="font-family: 宋体">注意：请保证</span>configure<span style="font-family: 宋体">文件是处于工程的根目录下面，否则在编译的时候会因为找不到該文件而出错。</span></p>
<p><span style="font-family: 宋体">第六，在工程中新建一个包，名字随你喜欢，主要是用来存放一些</span>JAVA<span style="font-family: 宋体">文件。右键单击工程</span>hibernateTest<span style="font-family: Wingdings">&#224;</span>new<span style="font-family: Wingdings">&#224;</span>package<span style="font-family: Wingdings">&#224;</span><span style="font-family: 宋体">写入包名，这里我所用的包名是</span>src<span style="font-family: 宋体">。完成以后，单击所建立的包，</span>new<span style="font-family: Wingdings">&#224;</span>other<span style="font-family: Wingdings">&#224;</span>hibernate<span style="font-family: Wingdings">&#224;</span>hibernate mapping file,<span style="font-family: 宋体">出现配置窗口，如果前面步骤正确的话，将会看到如图的画面，点击</span>tables<span style="font-family: 宋体">对应的</span>refresh<span style="font-family: 宋体">按键，将会出现你所建数据库中的表，此时选择我们所建立的</span>person<span style="font-family: 宋体">表，点击</span>finish<span style="font-family: 宋体">，会看到</span>src<span style="font-family: 宋体">目录中出现了一个</span>person.hbm.xml<span style="font-family: 宋体">文件，利用</span>hibernate Synchronizer Editer<span style="font-family: 宋体">打开这个文件，方法：右键单击該文件</span><span style="font-family: Wingdings">&#224;</span>openwith<span style="font-family: Wingdings">&#224;</span>hibernate Synchronizer Editer<span style="font-family: 宋体">。查看其中</span>ID<span style="font-family: 宋体">的</span>&lt;generator class&gt;<span style="font-family: 宋体">属性，确认該属性配置为</span>identity,<span style="font-family: 宋体">自动增长型。</span><span style="font-family: 宋体">配置完成。</span></p>
<p><span style="font-family: 宋体">经过上一步后，因为我们采用</span>hibernate Synchronizer<span style="font-family: 宋体">，</span>eclipse<span style="font-family: 宋体">会为我们自动生成一个</span>person.java<span style="font-family: 宋体">文件和一个</span>BasePerson.java<span style="font-family: 宋体">文件，</span>BasePerson.java<span style="font-family: 宋体">位于一个独立包中，主要是提供对数据库表</span>person<span style="font-family: 宋体">的相应字段的</span>get<span style="font-family: 宋体">和</span>set<span style="font-family: 宋体">方法，它实现</span>Serializable<span style="font-size: 10pt; color: black; font-family: 宋体">接口。并重写了其中的</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">equals(),hashCode()</span><span style="font-size: 10pt; color: black; font-family: 宋体">和</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">toString()</span><span style="font-size: 10pt; color: black; font-family: 宋体">方法。我理解为实际上就是一个</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">POJO</span><span style="font-size: 10pt; color: black; font-family: 宋体">，没有什么其它特殊的。而</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">person.java</span><span style="font-size: 10pt; color: black; font-family: 宋体">只是继承了</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">BasePerson.java</span><span style="font-size: 10pt; color: black; font-family: 宋体">，这样做的好处就是实现程序更好的封装。</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 宋体">上面的步骤都完成以后，我们需要将</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">person.hbm.xml</span><span style="font-size: 10pt; color: black; font-family: 宋体">文件映射到</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">hibernate.cfg.xml</span><span style="font-size: 10pt; color: black; font-family: 宋体">文件中去，这样才能程序找到</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">person</span><span style="font-size: 10pt; color: black; font-family: 宋体">这个类。方法：依次执行</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">1</span><span style="font-size: 10pt; color: black; font-family: 宋体">和</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">2</span><span style="font-size: 10pt; color: black; font-family: 宋体">。（</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">1</span><span style="font-size: 10pt; color: black; font-family: 宋体">）右键单击</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">person.hbm.xml</span><span style="font-size: 10pt; color: black; font-family: Wingdings">&#224;</span>hibernate Synchronizer<span style="font-family: Wingdings">&#224;</span> Synchronizefiles <span style="font-family: 宋体">。（</span>2<span style="font-family: 宋体">）</span><span style="font-size: 10pt; color: black; font-family: 宋体">右键单击</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">person.hbm.xml</span><span style="font-size: 10pt; color: black; font-family: Wingdings">&#224;</span>hibernate Synchronizer<span style="font-family: Wingdings">&#224;</span>Add mapping reference<span style="font-family: 宋体">。</span></p>
<p><span style="font-family: 宋体">经过以上所有操作，我们完成了所有需要配置的文件，现在来编写一个测试文件，测试我们的上述配置是否成功。新建一个</span>JAVA<span style="font-family: 宋体">文件。放在</span>src <span style="font-family: 宋体">目录下，在下输入以内容：</span></p>
<p>package src;</p>
<p>import java.util.Date;</p>
<p>import java.util.Iterator;</p>
<p>import org.hibernate.Session;</p>
<p>import org.hibernate.SessionFactory;</p>
<p>import org.hibernate.cfg.Configuration;</p>
<p>public class Hello {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /**</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;* </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;*</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;*/</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public Hello(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void main(String[] args) throws Exception{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Configuration cfg = new Configuration().configure();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SessionFactory sessionFactory = cfg.buildSessionFactory();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Session session = sessionFactory.openSession();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Person person = new Person();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; person.setName("hejian22");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; person.setSex("F");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; person.setAddress("http://test.com.cn");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.save(person);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.flush();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.close();</p>
<p style="text-indent: 42pt">}</p>
<p>}</p>
<p><span style="font-family: 宋体">完成后，运行該文件，会出现错误，经过多番查找资料，才发现</span>hibernate Synchronizer<span style="font-family: 宋体">插件有一个</span>BUG<span style="font-family: 宋体">，当我们通过</span>add mapping file<span style="font-family: 宋体">向</span>hibernate.cfg.xm.<span style="font-family: 宋体">添加映射文件的时候，它会自动将</span>hibernate.cfg.xm.<span style="font-family: 宋体">的标题部份去掉。这时只要把标题部份写上便可以成功执行。</span></p>
<p><span style="font-family: 宋体">在这里我只写出了向数据库中添加记录这一项功能，其它功能可以由自己去试验。都是最基础的东西，还得继续努力。</span></p>
<p><span style="font-family: 宋体">总结：经过这次教训，自己意识到一个问题，我们不能总把从网上找到的代码就直接拿去运行調试，而应该弄清楚它的基本结构，因为可能其中存在许多问题，要想把一段代码真正变成自己的，还是要经过一定的探索。</span></p>
<br />
<span lang="EN-US" style="font-size: 10.5pt; font-family: Century; mso-fareast-language: ZH-CN; mso-fareast-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA"><v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600">&nbsp;<v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:\DOCUME~1\PC001\LOCALS~1\Temp\msohtml1\01\clip_image001.png"></v:imagedata></v:shape></span></span> 
<img src ="http://www.blogjava.net/hejian811/aggbug/149664.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hejian811/" target="_blank">^小^齐^</a> 2007-09-29 19:17 <a href="http://www.blogjava.net/hejian811/archive/2007/09/29/149664.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>