﻿<?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-liubijin-随笔分类-Hibernate</title><link>http://www.blogjava.net/liubijin/category/44662.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 05 May 2010 04:19:51 GMT</lastBuildDate><pubDate>Wed, 05 May 2010 04:19:51 GMT</pubDate><ttl>60</ttl><item><title>hibernate中Criteria的用法示例</title><link>http://www.blogjava.net/liubijin/archive/2010/05/04/320039.html</link><dc:creator>無所謂</dc:creator><author>無所謂</author><pubDate>Tue, 04 May 2010 06:07:00 GMT</pubDate><guid>http://www.blogjava.net/liubijin/archive/2010/05/04/320039.html</guid><wfw:comment>http://www.blogjava.net/liubijin/comments/320039.html</wfw:comment><comments>http://www.blogjava.net/liubijin/archive/2010/05/04/320039.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/liubijin/comments/commentRss/320039.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liubijin/services/trackbacks/320039.html</trackback:ping><description><![CDATA[<p>hibernate支持一种java编写习惯的查询api，使用session建立net.sf.hibernate.Criteria，您可以在不用sql甚至hql的情况下进行查询。 <br />
&nbsp;&nbsp;&nbsp;&nbsp; 如果我们要查询User的所有信息我们可以如下使用Criteria：</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">Criteria&nbsp;crit&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;session.createCriteria(User.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;users&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;crit.list();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(ListIterator&nbsp;iterator&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;users.listIterator();&nbsp;iterator.hasNext();&nbsp;)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(User)&nbsp;iterator.next();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">name:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;user.getName());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">age:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;user.getAge());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<p><br />
我们要为查询限定条件，可以通过net.sf.hibernate.expression.Expression设置Expression有很多的条件查询方法下面举一些例子：<br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">Criteria&nbsp;crit&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;session.createCriteria(User.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;crit.add(Expression.ge(</span><span style="color: #000000">"</span><span style="color: #000000">age</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Integer(</span><span style="color: #000000">25</span><span style="color: #000000">)));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;users&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;crit.list();</span></div>
<p><br />
ge（）表示大于等于，即age大于等于25的user。</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">crit.add(Expression.gt(</span><span style="color: #000000">"</span><span style="color: #000000">age</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Integer(</span><span style="color: #000000">20</span><span style="color: #000000">)));<br />
crit.add(Expression.between(</span><span style="color: #000000">"</span><span style="color: #000000">weight</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Integer(</span><span style="color: #000000">60</span><span style="color: #000000">)，</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Integer(</span><span style="color: #000000">80</span><span style="color: #000000">)));<br />
List&nbsp;users&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;crit.list();</span></div>
<p><br />
between表示weight在60和80之间。<br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">crit.add(Expression.or(<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Expression.eq(</span><span style="color: #000000">"</span><span style="color: #000000">age</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Integer(</span><span style="color: #000000">20</span><span style="color: #000000">)),<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Expression.isNull(</span><span style="color: #000000">"</span><span style="color: #000000">age</span><span style="color: #000000">"</span><span style="color: #000000">)<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;));<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />List&nbsp;users&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;crit.list();</span></div>
<p><br />
eq表示age为20的user。<br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">Criteria&nbsp;crit&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;session.createCriteria(User.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />
crit.setFirstResult(</span><span style="color: #000000">51</span><span style="color: #000000">);<br />
crit.setMaxResult(</span><span style="color: #000000">50</span><span style="color: #000000">);<br />
List&nbsp;users&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;crit.list();</span></div>
<p>&nbsp;</p>
<p>setMaxResult（）设置返回的信息条数，setFirstResult（）设置查询结果的初始位置，上面的程序段可以实现分页。</p>
<p>&nbsp;</p>
<p>在hibernate的Session里面使用createCriteria可以创建一个Criteria实例帮助我们进行条件查询，不用自己串hql语句，很方便。<br />
用法很简单，首先传Class实例创建Criteria，Class实例对应你想要查询的那个实体:<br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">Criteria&nbsp;c&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;session.createCriteria(Person.</span><span style="color: #0000ff">class</span><span style="color: #000000">);</span></div>
<p><br />
然后调用Criteria的add方法加入条件（Restrictions）。常用的条件有：<br />
&nbsp;<br />
方法说明： Restrictions.eq&nbsp;等于&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Restrictions.allEq 使用Map，使用key/value进行多个等于的对比<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Restrictions.gt 大于 &gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Restrictions.ge 大于等于 &gt;= <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Restrictions.lt 小于 &lt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Restrictions.le 小于等于 &lt;= <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; Restrictions.between 对应SQL的BETWEEN子句 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Restrictions.like 对应SQL的LIKE子句 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Restrictions.in 对应SQL的in子句<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;Restrictions.and&nbsp; &nbsp;and关系<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; Restrictions.or&nbsp;&nbsp; or关系 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Restrictions.sqlRestriction&nbsp;&nbsp;&nbsp; SQL限定查詢&nbsp; <br />
<br />
<br />
例如，我想返回Person实体里面年龄(age)大于20的记录，那么就为Criteria加入Restrictions.gt条件：<br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">List&nbsp;list&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;c.add(Restrictions.gt(&#8220;age&#8221;,</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Integer(</span><span style="color: #000000">20</span><span style="color: #000000">))).list();</span></div>
<p><br />
&nbsp;<br />
Restrictions.and和Restrictions.or很有用，表示and查询还是or查询，例如我要查询Person实体里面年龄(age)大于20，或者性别 (sex)为man<br />
的记录，那么就为Criteria加入:<br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">List&nbsp;list&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;c.add(Restrictions.or(<br />
Restrictions.gt(&#8220;age&#8221;,</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Integer(</span><span style="color: #000000">20</span><span style="color: #000000">)),<br />
Restrictions.eq(&#8220;sex&#8221;,&#8221;man&#8221;)<br />
)).list();<br />
&nbsp;</span></div>
<p><br />
如果需要关联查询的话，可以使用Criteria的createCriteria方法创建一个Criteria，例如部门(Department)和人员(Person)是一对多的关系，我要查询Person实体里面年龄(age)大于20，性别 (sex)为man，<br />
备注包含应届生，<br />
且所在部门(department)是开发部的记录:<br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">List&nbsp;list&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;c.add(Restrictions.gt(&#8220;age&#8221;,&nbsp; </span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Integer(</span><span style="color: #000000">20</span><span style="color: #000000">)))<br />
.add(Restrictions.eq(&#8220;sex&#8221;,&#8221;man&#8221;))<br />
.add(Restrictions.like(&#8220;Memo&#8221;,&#8221;</span><span style="color: #000000">%</span><span style="color: #000000">应届生</span><span style="color: #000000">%</span><span style="color: #000000">&#8221;))<br />
.createCriteria(&#8220;department&#8221;)<br />
.add(Restrictions.eq(&#8220;departmentname&#8221;,&#8221;开发部&#8221;))<br />
.list();</span></div>
<p><br />
&nbsp;<br />
其他条件的用法也很简单，就不列举了。<br />
&nbsp;<br />
另外，Hibernate3出了一个org.hibernate.criterion.DetachedCriteria，即离线Criteria，它允许你可以先创建DetachedCriteria，然后传到Session里面才真正返回一个Criteria，用法如下：<br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">&nbsp;<br />
DetachedCriteria&nbsp;detchedCriteria&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;DetachedCriteria.forClass(Person.</span><span style="color: #0000ff">class</span><span style="color: #000000">);&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;先建立DetchedCriteria物件</span><span style="color: #008000"><br />
</span><span style="color: #000000">detchedCriteria.add(Restrictions.ge(</span><span style="color: #000000">"</span><span style="color: #000000">age</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Integer(</span><span style="color: #000000">25</span><span style="color: #000000">)));&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;加入查询条件</span><span style="color: #008000"><br />
</span><span style="color: #000000">Session&nbsp;session&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;sessionFactory.openSession();<br />
Criteria&nbsp;criteria&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;detchedCriteria.getExecutableCriteria(session);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;绑定Session並返回一个Criteria实例List&nbsp;list&nbsp;=&nbsp;criteria.list();&nbsp;</span></div>
<p><br />
&nbsp;<br />
&nbsp;<br />
最后，需要注意，Criteria还提供了setFirstResult和setMaxResults方法进行分页查询。<br />
&nbsp;<br />
</p>
<img src ="http://www.blogjava.net/liubijin/aggbug/320039.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liubijin/" target="_blank">無所謂</a> 2010-05-04 14:07 <a href="http://www.blogjava.net/liubijin/archive/2010/05/04/320039.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate基本介绍+一个简单的程序</title><link>http://www.blogjava.net/liubijin/archive/2010/05/04/320028.html</link><dc:creator>無所謂</dc:creator><author>無所謂</author><pubDate>Tue, 04 May 2010 04:26:00 GMT</pubDate><guid>http://www.blogjava.net/liubijin/archive/2010/05/04/320028.html</guid><wfw:comment>http://www.blogjava.net/liubijin/comments/320028.html</wfw:comment><comments>http://www.blogjava.net/liubijin/archive/2010/05/04/320028.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liubijin/comments/commentRss/320028.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liubijin/services/trackbacks/320028.html</trackback:ping><description><![CDATA[<p><strong>一、基础入门</strong></p>
<p>从一个最基本的对象关系映像自动化程序，了解Hibernate组成的基本元素，并进一步了解Hibernate的基础语义、配置等概念。</p>
<p><strong>1．O/R映像入门第一个Hibernate程序很简单，将一个对象映像至一个数据表</strong></p>
<p><strong>1．1配置Hibernate<br />
</strong>Hibernate是ORM的解决方案，其底层对数据库的操作依赖于JDBC，所以您必须先取得JDBC驱动程序，在这边所使用的是MySQL，所以您必须至MySQL&#174;Connector/J取得MySQL的JDBC驱动程序。</p>
<p>接下来至Hibernate官方网站取得hibernate 3.0。</p>
<p>解开zip档案后，当中的hibernate3.jar是必要的，而在lib目录中还包括了许多jar档案，您可以在Hibernate 3.0官方的参考手册上找到这些jar的相关说明，其中必要的是antlr、dom4j、CGLIB、asm、Commons Collections、Commons Logging、 EHCache，Hibernate底层还需要Java Transaction API，所以您还需要jta.jar，到这边为止，总共需要以下的jar档案：</p>
<p>Hibernate可以运行于单机之上，也可以运行于Web应用程序之中，如果是运行于单机，则将所有用到的jar档案（包括JDBC驱动程序）设定至CLASSPATH中，如果是运行于Web应用程序中，则将jar档案置放于WEB-INF/lib中。</p>
<p>如果您还需要额外的Library，再依需求加入，例如JUnit、Proxool等等，接下来可以将etc目录下的log4j.properties复制至Hibernate项目的Classpath下，并修改一下当中的log4j.logger.org.hibernate为error，也就是只在错误发生时显示必要的讯息。</p>
<p>接着设置基本的Hibernate配置文件，可以使用XML或Properties档案，这边先使用XML，档名预设为hibernate.cfg.xml：</p>
<p><strong>hibernate.cfg.xml</strong></p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>&lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
            &lt;!DOCTYPE hibernate-configuration PUBLIC<br />
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"<br />
            "<a href="http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd</a>"&gt;<br />
            &lt;hibernate-configuration&gt;<br />
            &lt;session-factory&gt;<br />
            &lt;!-- 显示实际操作数据库时的SQL --&gt;<br />
            &lt;property name="show_sql"&gt;true&lt;/property&gt;<br />
            &lt;!-- SQL 方言，这边设定的是MySQL --&gt;<br />
            &lt;property name="dialect"&gt;org.hibernate.dialect.MySQLDialect&lt;/property&gt;<br />
            &lt;!-- JDBC 驱动程序 --&gt;<br />
            &lt;property name="connection.driver_class"&gt;com.mysql.jdbc.Driver&lt;/property&gt;<br />
            &lt;!-- JDBC URL --&gt;<br />
            &lt;property name="connection.url"&gt;jdbc:mysql://localhost/demo&lt;/property&gt;<br />
            &lt;!-- 数据库使用者 --&gt;<br />
            &lt;property name="connection.username"&gt;caterpillar&lt;/property&gt;<br />
            &lt;!-- 数据库密码 --&gt;<br />
            &lt;property name="connection.password"&gt;123456&lt;/property&gt;<br />
            &lt;!-- 以下设置对象与数据库表格映像文件 --&gt;<br />
            &lt;/session-factory&gt;<br />
            &lt;/hibernate-configuration&gt;</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>配置文件中已经加上批注为每一个项目作了说明，其中对象与数据库表格映像文件还有待加入。</p>
<p><strong>1．2第一个Hibernate<br />
</strong>这边以一个简单的单机程序来示范Hibernate的配置与功能，首先作数据库的准备工作，在MySQL中新增一个demo数据库，并建立user表格：</p>
<p><strong>CreateUser2MySQL.sql</strong></p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>CREATE TABLE user (<br />
            id INT(11) NOT NULL auto_increment PRIMARY KEY,<br />
            name VARCHAR(100) NOT NULL default '',<br />
            age INT<br />
            );</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>对于这个表格，您有一个User类别与之对应，表格中的每一个字段将对应至User实例上的Field成员。</p>
<p><strong>User.java</strong></p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>package onlyfun.caterpillar;<br />
            public class User {<br />
            private Integer id;<br />
            private String name;<br />
            private Integer age;<br />
            // 必须要有一个预设的建构方法<br />
            // 以使得Hibernate 可以使用Constructor.newInstance()建立对象<br />
            public User() {<br />
            }<br />
            public Integer getId() {<br />
            return id;<br />
            }<br />
            public void setId(Integer id) {<br />
            this.id = id;<br />
            }<br />
            public String getName() {<br />
            return name;<br />
            }<br />
            public void setName(String name) {<br />
            this.name = name;<br />
            }<br />
            public Integer getAge() {<br />
            return age;<br />
            }<br />
            public void setAge(Integer age) {<br />
            this.age = age;<br />
            }<br />
            }</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>其中id是个特殊的属性，Hibernate会使用它来作为主键识别，您可以定义主键产生的方式，这是在XML映像文件中完成，为了告诉Hibernate您所定义的User实例如何映像至数据库表格，您撰写一个XML映射文件档名是User.hbm.xml，如下所示：</p>
<p><strong>User.hbm.xml</strong></p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>&lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
            &lt;!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"<br />
            "<a href="http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd</a>"&gt;<br />
            &lt;hibernate-mapping&gt;<br />
            &lt;class name="onlyfun.caterpillar.User" table="user"&gt;<br />
            &lt;id name="id" column="id" type="java.lang.Integer"&gt;<br />
            &lt;generator class="native" /&gt;<br />
            &lt;/id&gt;<br />
            &lt;property name="name" column="name" type="java.lang.String" /&gt;<br />
            &lt;property name="age" column="age" type="java.lang.Integer" /&gt;<br />
            &lt;/class&gt;<br />
            &lt;/hibernate-mapping&gt;</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>&lt;class&gt;卷标的name属性为所映像的对象，而table为所映像的表格；&lt;id&gt;中column属性指定了表格字段，而type属性指定了User实例的中的id之型态，这边type中所设定的是直接指定Java中的对象型态，Hibernate也定义有自己的映像型态，作为Java对象与SQL型态的标准对应型态（因为语言所提供的类型并不一定与数据库的类型对应），这之后会再说明。</p>
<p>#p#</p>
<p>&lt;id&gt;中主键的产生方式在这边设定为"native"，表示主键的生成方式由Hibernate根据数据库Dialect的定义来决定，之后还会介绍其它主键的生成方式。</p>
<p>同样的，&lt;property&gt;标签中的column与type都各自指明了表格中字段与对象中属性的对应。</p>
<p>接着必须在Hibernate配置文件hibernate.cfg.xml中指明映像文件的位置，如下加入映像文件位置：</p>
<p><strong>hibernate.cfg.xml</strong></p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>&lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
            &lt;!DOCTYPE hibernate-configuration PUBLIC<br />
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"<br />
            "<a href="http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd</a>"&gt;<br />
            &lt;hibernate-configuration&gt;<br />
            &lt;session-factor&gt;<br />
            ....<br />
            &lt;!-- 对象与数据库表格映像文件 --&gt;<br />
            &lt;mapping resource="onlyfun/caterpillar/User.hbm.xml"/&gt;<br />
            &lt;/session-factory&gt;<br />
            &lt;/hibernate-configuration&gt;</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>接下来撰写一个测试的程序，这个程序直接以Java 程序设计人员熟悉的语法方式来操作对象，而实际上也直接完成对数据库的操作，程序将会将一笔数据存入表格之中：</p>
<p><strong>FirstHibernate.java</strong></p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>package onlyfun.caterpillar;<br />
            import org.hibernate.Session;<br />
            import org.hibernate.SessionFactory;<br />
            import org.hibernate.Transaction;<br />
            import org.hibernate.cfg.Configuration;<br />
            public class FirstHibernate {<br />
            public static void main(String[] args) {<br />
            // Configuration 负责管理 Hibernate 配置讯息<br />
            Configuration config = new Configuration().configure();<br />
            // 根据 config 建立 SessionFactory<br />
            // SessionFactory 将用于建立 Session<br />
            SessionFactory sessionFactory = config.buildSessionFactory();<br />
            //将持久化的物件<br />
            User user = new User();<br />
            user.setName("caterpillar");<br />
            user.setAge(new Integer(30));<br />
            //开启Session，相当于开启JDBC 的Connection<br />
            Session session = sessionFactory.openSession();<br />
            //Transaction 表示一组对DB 的交易<br />
            Transaction tx = session.beginTransaction();<br />
            //将对象映像至数据库表格中储存<br />
            session.save(user);<br />
            tx.commit();<br />
            session.close();<br />
            sessionFactory.close();<br />
            System.out.println("新增资料OK!请先用MySQL 观看结果！");<br />
            }<br />
            }</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>如您所看到的，程序中只需要直接操作User 对象，并进行Session 与Transaction 的相关操作，Hibernate 就会自动完成对数据库的操作，您看不到任何一行JDBC 或SQL 的陈述，撰写好以上的各个档案之后，各档案的放置位置如下：</p>
<p>接着可以开始运行程序，结果如下：</p>
<p><strong>FirstHibernate执行结果</strong></p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>Hibernate: insert into user (name, age) values (?, ?)</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>新增资料OK!请先用MySQL 观看结果！</p>
<p>执行结果中显示了Hibernate 所实际使用的SQL，由于这个程序还没有查询功能，所以要<br />
进入MySQL 中看看新增的数据，如下：</p>
<p><strong>MySQL 中查询结果</strong></p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>mysql&gt; select * from user;<br />
            +----+-------------+------+<br />
            | id | name | age |<br />
            +----+-------------+------+<br />
            | 1 | caterpillar | 30 |<br />
            +----+-------------+------+<br />
            1 row in set (0.03 sec)</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>Comments</p>
<p>第四段代码的标题应该是hibernate.cfg.xml</p>
<p><strong>1．3 第二个 Hibernate</strong><br />
在 第一个 Hibernate 中介绍如何使用Hibernate 在不使用SQL 的情况下，以Java 中操作对象的习惯来插入数据至数据库中，当然储存数据之后，更重要的是如何将资料读出，Hibernate 中也可以让您不写一句SQL，而以Java 中操作对象的习惯来查询数据。</p>
<p>直接来看个范例：</p>
<p><strong>SecondHibernate.java</strong></p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>package onlyfun.caterpillar;<br />
            import org.hibernate.Criteria;<br />
            import org.hibernate.Session;<br />
            import org.hibernate.SessionFactory;<br />
            import org.hibernate.cfg.Configuration;<br />
            import org.hibernate.criterion.Expression;<br />
            import java.util.Iterator;<br />
            import java.util.List;<br />
            public class SecondHibernate {<br />
            public static void main(String[] args) {<br />
            Configuration config = new Configuration().configure();<br />
            SessionFactory sessionFactory = config.buildSessionFactory();<br />
            Session session = sessionFactory.openSession();<br />
            Criteria criteria = session.createCriteria(User.class);<br />
            // 查询user 所有字段<br />
            List users = criteria.list();<br />
            Iterator iterator = users.iterator();<br />
            System.out.println("id \t name/age");<br />
            while (iterator.hasNext()) {<br />
            User user = (User) iterator.next();<br />
            System.out.println(user.getId() + " \t " + user.getName() + "/" +<br />
            user.getAge());<br />
            }<br />
            // 查询user 中符合条件的字段<br />
            criteria.add(Expression.eq("name", "caterpillar"));<br />
            users = criteria.list();<br />
            iterator = users.iterator();<br />
            System.out.println("id \t name/age");<br />
            while (iterator.hasNext()) {<br />
            User user = (User) iterator.next();<br />
            System.out.println(user.getId() + " \t " + user.getName() + "/" +<br />
            user.getAge());<br />
            }<br />
            session.close();<br />
            sessionFactory.close();<br />
            }<br />
            }</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>#p#</p>
<p>Criteria 对SQL 进行封装，对于不甚了解SQL 的开发人员来说，使用Criteria 也可以轻易的进行各种数据的检索，您也可以使用 Expression 设定查询条件，并将之加入Criteria中对查询结果作限制，Expression.eq()表示设定符合条件的查询，例如Expression.eq("name", "caterpillar")表示设定查询条件为"name"字段中为"caterpillar"的数据。</p>
<p>先来看一下执行结果：<br />
<strong>SecondHibernate 执行结果</strong></p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>Hibernate: select this_.id as id0_, this_.name as name0_0_, </p>
            <p>this_.age as age0_0_ from user </p>
            <p>this_id<br />
            id name/age<br />
            1 caterpillar/30<br />
            3 bush/5<br />
            2 momor/26<br />
            Hibernate: select this_.id as id0_, this_.name as name0_0_, </p>
            <p>this_.age as age0_0_ from user </p>
            <p>this_<br />
            where this_.name=?<br />
            id name/age<br />
            1 caterpillar/30</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>Criteria 是对象导向式的查询方式，让不了解SQL 的开发人员也可以轻易进行各项查询，但Criteria 的API 目前还不是很完善，而Hibernate 鼓励的查询方式，是透过HQL（Hibernate Query Language）来进行，直接来看个实例：</p>
<p><strong>SecondHibernateUsingHQ.java</strong></p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>package onlyfun.caterpillar;<br />
            import org.hibernate.Query;<br />
            import org.hibernate.Session;<br />
            import org.hibernate.SessionFactory;<br />
            import org.hibernate.cfg.Configuration;<br />
            import java.util.Iterator;<br />
            import java.util.List;<br />
            public class SecondHibernateUsingHQ {<br />
            public static void main(String[] args) {<br />
            Configuration config = new Configuration().configure();<br />
            SessionFactory sessionFactory = config.buildSessionFactory();<br />
            Session session = sessionFactory.openSession();<br />
            // 使用HQL 建立查询<br />
            Query query = session.createQuery("from User");<br />
            List users = query.list();<br />
            Iterator iterator = users.iterator();<br />
            System.out.println("id \t name/age");<br />
            while (iterator.hasNext()) {<br />
            User user = (User) iterator.next();<br />
            System.out.println(user.getId() + " \t " + user.getName() + "/" +<br />
            user.getAge());<br />
            }<br />
            System.out.println();<br />
            // 使用HQL 建立查询<br />
            query = session.createQuery("from User user where user.name like ?");<br />
            // 设定查询参数<br />
            query.setParameter(0, "caterpillar");<br />
            users = query.list();<br />
            iterator = users.iterator();<br />
            System.out.println("id \t name/age");<br />
            while (iterator.hasNext()) {<br />
            User user = (User) iterator.next();<br />
            System.out.println(user.getId() + " \t " + user.getName() + "/" +<br />
            user.getAge());<br />
            }<br />
            session.close();<br />
            sessionFactory.close();<br />
            }<br />
            }</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>执行结果：</p>
<p><strong>SecondHibernateUsingHQ 执行结果</strong></p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>Hibernate: select this_.id as id0_, this_.name as name0_0_, </p>
            <p>  this_.age as age0_0_ from user </p>
            <p>this_id<br />
            id name/age<br />
            1 caterpillar/30<br />
            3 bush/5<br />
            2 momor/26<br />
            Hibernate: select this_.id as id0_, this_.name as name0_0_,  </p>
            <p>  this_.age as age0_0_ from user </p>
            <p>this_<br />
            where this_.name=?<br />
            id name/age<br />
            1 caterpillar/30</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>透过Query 接口，您可以先设定查询参数，之后透过setXXX()等方法，将指定的参数值填入，而不用每次都撰写完整的HQL，Query 的setParameter()方法第一个参数是指定?出现的位置，从 0 开始，第二个参数则是设定查询条件。 </p>
<p>#p#</p>
<p><strong>二、简单的Hibernate 程序</strong></p>
<p>这边以一个简单的单机程序来示范Hibernate的配置与功能，在这个例子中的一些操作，实际上会使用一些自动化工具来完成，而不一定亲自手动操作设定，这边完全手动的原因，在于让您可以知道Hibernate实际上会作那些动作，在进行范例之前，请先确定前一个主题中的相关jar档案都已经设定在CLASSPATH中。<br />
　<br />
我们先作数据库的准备工作，在MySQL中新增一个HibernateTest数据库，并建立USER表格： </p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>CREATE TABLE USER (<br />
            &nbsp;&nbsp;&nbsp; user_id CHAR(32) NOT NULL PRIMARY KEY,<br />
            &nbsp;&nbsp;&nbsp; name VARCHAR(16) NOT NULL,<br />
            &nbsp;&nbsp;&nbsp; sex CHAR(1),<br />
            &nbsp;&nbsp;&nbsp; age INT<br />
            );</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>我们先撰写一个纯Java对象，它纯綷表示一个数据集合，待会我们会将之映像至数据库的表格上，程序如下： </p>
<p><strong>User.java</strong></p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>package onlyfun.caterpillar;<br />
            &nbsp;public class User {<br />
            &nbsp;&nbsp;&nbsp; private String id;<br />
            &nbsp;&nbsp;&nbsp; private String name;<br />
            &nbsp;&nbsp;&nbsp; private char sex;<br />
            &nbsp;&nbsp;&nbsp; private int age;<br />
            &nbsp;&nbsp;&nbsp; public int getAge() {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return age;<br />
            &nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp; public String getId() {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return id;<br />
            &nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp; public String getName() {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return name;<br />
            &nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp; public char getSex() {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return sex;<br />
            &nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp; public void setAge(int i) {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; age = i;<br />
            &nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp; public void setId(String string) {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id = string;<br />
            &nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp; public void setName(String string) {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name = string;<br />
            &nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp; public void setSex(char c) {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sex = c;<br />
            &nbsp;&nbsp;&nbsp; }<br />
            }</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>其中id是个特殊的属性，Hibernate会使用它来作为主键识别，我们可以定义主键产生的方式，这是在XML映像文件中完成，为了告诉Hibernate对象如何映像至数据库表格，我们撰写一个XML映射文件档名是User.hbm.xml，如下所示： </p>
<p><strong>User.hbm.xml</strong></p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>&lt;?xml version="1.0"?&gt;<br />
            &lt;!DOCTYPE hibernate-mapping<br />
            &nbsp;&nbsp;&nbsp; PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"<br />
            &nbsp;&nbsp;&nbsp; "<a href="http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd</a>"&gt;<br />
            &lt;hibernate-mapping&gt;<br />
            &nbsp;&nbsp;&nbsp; &lt;class name="onlyfun.caterpillar.User" table="USER"&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;id name="id" type="string" unsaved-value="null"&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;column name="user_id" sql-type="char(32)" /&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;generator class="uuid.hex"/&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/id&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="name" type="string" not-null="true"&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;column name="name" length="16" not-null="true"/&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="sex" type="char"/&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="age" type="int"/&gt;<br />
            &nbsp;&nbsp;&nbsp; &lt;/class&gt;<br />
            &lt;/hibernate-mapping&gt;</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>这个XML文件定义了对象属性映像至数据库表格的关系，您可以很简单的了解对映的方法，像是User对象对应至USER表格，其中我们使用 uuid.hex来定义主键的产生算法，UUID算法使用IP地址、JVM的启动时间、系统时间和一个计数值来产生主键。除了使用uuid.hex之外，我们还可以使用其它的方式来产生主键，像是increment等，这可以在Hibernate参考手册中找到相关资料。</p>
<p>&lt;property&gt;卷标用于定义Java对象的属性，而当中的&lt;column/&gt;卷标用于定义与数据库的对应，如果您是手工建立Java对象与数据库表格，则在最简单的情况下，可以只定义&lt;property name="sex"/&gt;这样的方式，而由Hibernate自动判断Java对象属性与数据库表格名称对应关系，在&lt; property/&gt;与&lt;column/&gt;标签上的额外设定（像是not null、sql-type等），则可以用于自动产生Java对象与数据库表格的工具上。</p>
<p>接下来我们定义Hibernate配置文件，主要是进行SessionFactory配置，Hibernate可以使用XML或属性文件来进行配置，我 们这边先介绍如何使用XML配置，这也是Hibernate所建议的配置方式，我们的文件名是hibernate.cfg.xml，如下： </p>
<p><strong>hibernate.cfg.xml</strong></p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>&lt;?xml version='1.0' encoding='big5'?&gt;<br />
            &lt;!DOCTYPE hibernate-configuration<br />
            &nbsp;&nbsp;&nbsp; PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"<br />
            &nbsp;&nbsp;&nbsp; "<a href="http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd</a>"&gt;<br />
            &lt;hibernate-configuration&gt;<br />
            &nbsp;&nbsp;&nbsp; &lt;session-factory&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 显示实际操作数据库时的SQL --&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="show_sql"&gt;true&lt;/property&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- SQL方言，这边设定的是MySQL --&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="dialect"&gt;net.sf.hibernate.dialect.MySQLDialect&lt;/property&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- JDBC驱动程序 --&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="connection.driver_class"&gt;com.mysql.jdbc.Driver&lt;/property&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- JDBC URL --&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="connection.url"&gt;jdbc:mysql://localhost/HibernateTest&lt;/property&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 数据库使用者 --&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="connection.username"&gt;caterpillar&lt;/property&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 数据库密码 --&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="connection.password"&gt;123456&lt;/property&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 对象与数据库表格映像文件 --&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mapping resource="User.hbm.xml"/&gt;<br />
            &nbsp;&nbsp;&nbsp; &lt;/session-factory&gt;<br />
            &lt;/hibernate-configuration&gt;</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>接下来我们撰写一个测试的程序，这个程序将直接以Java程序设计人员熟悉的语法方式来操作对象，而实际上也直接完成对数据库的操作，程序将会将一笔数据存入表格之中： </p>
<p><strong>HibernateTest.java</strong></p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>import onlyfun.caterpillar.*;<br />
            import net.sf.hibernate.*;<br />
            import net.sf.hibernate.cfg.*;<br />
            public class HibernateTest {<br />
            &nbsp;&nbsp;&nbsp; public static void main(String[] args) throws HibernateException {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SessionFactory sessionFactory = <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new Configuration().configure().buildSessionFactory();<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; User user = new User();<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; user.setName("caterpillar");<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; user.setSex('M');<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; user.setAge(28);<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Session session = sessionFactory.openSession();<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Transaction tx= session.beginTransaction();<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.save(user);<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tx.commit();<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.close();<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sessionFactory.close();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("新增资料OK!请先用MySQL观看结果！");<br />
            &nbsp;&nbsp;&nbsp; }<br />
            }</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>#p#</p>
<p>Configuration代表了Java对象至数据库的映像设定，这个设定是从我们上面的XML而来，接下来我们从Configuration取得SessionFactory对象，并由它来开启一个Session，它代表对象与表格的一次会话操作，而 Transaction则表示一组会话操作，我们只需要直接操作User对象，并进行Session与Transaction的相关操作， Hibernate就会自动完成对数据库的操作。这边对程序先只作简单的介绍，之后再详加说明。</p>
<p>将所有的.java档案编译，并将两个XML档案放置在与HibernateTest相同的目录中，也就是档案位置如下： </p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>/<br />
            |--HibernateTest.class<br />
            |--User.hbm.xml<br />
            |--hibernate.cfg.xml<br />
            &nbsp;&nbsp;&nbsp; /onlyfun<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /caterpillar<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |--User.class</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>OK!现在您可以执行HibernateTest，程序将会出现以下的讯息： </p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>log4j:WARN No appenders could be found for logger (net.sf.hibernate.cfg.Environment).<br />
            log4j:WARN Please initialize the log4j system properly.<br />
            Hibernate: insert into USER (name, sex, age, user_id) values (?, ?, ?, ?)</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>新增资料OK!请先用MySQL观看结果！</p>
<p>这边只先进行数据的存入，要观看数据存入的结果的话，请进入MySQL观看，以下是数据库存入的结果： </p>
<p>&nbsp;</p>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="400" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>mysql&gt; SELECT * FROM USER;<br />
            +----------------------------------+-------------+------+------+<br />
            | user_id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | sex&nbsp; | age&nbsp; |<br />
            +----------------------------------+-------------+------+------+<br />
            | 297e3dbdfea6023d00fea60241000001 | caterpillar | M&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; 28 |<br />
            +----------------------------------+-------------+------+------+<br />
            1 rows in set (0.00 sec) </p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/liubijin/aggbug/320028.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liubijin/" target="_blank">無所謂</a> 2010-05-04 12:26 <a href="http://www.blogjava.net/liubijin/archive/2010/05/04/320028.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java数据类型，hibernate数据类型，标准sql数据类型之间的对应表 </title><link>http://www.blogjava.net/liubijin/archive/2010/05/04/320024.html</link><dc:creator>無所謂</dc:creator><author>無所謂</author><pubDate>Tue, 04 May 2010 04:07:00 GMT</pubDate><guid>http://www.blogjava.net/liubijin/archive/2010/05/04/320024.html</guid><wfw:comment>http://www.blogjava.net/liubijin/comments/320024.html</wfw:comment><comments>http://www.blogjava.net/liubijin/archive/2010/05/04/320024.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liubijin/comments/commentRss/320024.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liubijin/services/trackbacks/320024.html</trackback:ping><description><![CDATA[Hibernate API简介<br />
其接口分为以下几类：<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 提供访问数据库的操作的接口；<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用于配置Hibernate的接口；<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 回调接口<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 扩展Hibernate的功能的接口。<br />
这些接口大多数位于net.sf.hibernate包中<br />
<br />
Hibernate的核心接口<br />
5个核心接口：<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Configuration接口：配置Hibernate,根启动Hibernate，创建SessionFactory对象。<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SessionFactory接口：初始化Hibernate，充当数据存储源的代理，创建Session对象。<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Session接口：负责保存、更新、删除、加载和查询对象。<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Transaction：管理事务。<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Query和Criteria接口：执行数据库查询。<br />
<br />
SessionFactory实例对应一个数据存储源，特点：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 线程安全的，重量级。<br />
Session：是Hibernate应用最广泛的接口，特点：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不是线程安全的，轻量级。<br />
<br />
java数据类型，hibernate数据类型，标准sql数据类型之间的对应表<br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/liubijin/12.jpg" />
<img src ="http://www.blogjava.net/liubijin/aggbug/320024.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liubijin/" target="_blank">無所謂</a> 2010-05-04 12:07 <a href="http://www.blogjava.net/liubijin/archive/2010/05/04/320024.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hello,World in Hibernate 入门 </title><link>http://www.blogjava.net/liubijin/archive/2010/05/04/320014.html</link><dc:creator>無所謂</dc:creator><author>無所謂</author><pubDate>Tue, 04 May 2010 03:30:00 GMT</pubDate><guid>http://www.blogjava.net/liubijin/archive/2010/05/04/320014.html</guid><wfw:comment>http://www.blogjava.net/liubijin/comments/320014.html</wfw:comment><comments>http://www.blogjava.net/liubijin/archive/2010/05/04/320014.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liubijin/comments/commentRss/320014.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liubijin/services/trackbacks/320014.html</trackback:ping><description><![CDATA[<p>本文介绍如何用hibernate写一个hello world 程序，以及说明Hibernate下的对象的识别。<br />
1、配置文件hibernate.cfg.xml：</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /> <span style="color: #000000">&lt;?</span> <span style="color: #000000">xml&nbsp;version</span> <span style="color: #000000">=</span> <span style="color: #000000">'</span> <span style="color: #000000">1.0</span> <span style="color: #000000">'</span> <span style="color: #000000">&nbsp;encoding</span> <span style="color: #000000">=</span> <span style="color: #000000">'</span> <span style="color: #000000">utf-8</span> <span style="color: #000000">'</span> <span style="color: #000000">?&gt;</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /> </span><span style="color: #000000">&lt;!</span> <span style="color: #000000">DOCTYPE&nbsp;hibernate</span> <span style="color: #000000">-</span> <span style="color: #000000">configuration&nbsp;PUBLIC<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">"</span> <span style="color: #000000">-//Hibernate/Hibernate&nbsp;Configuration&nbsp;DTD&nbsp;3.0//EN</span> <span style="color: #000000">"</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">"</span> <span style="color: #000000">http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /> <br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /> </span><span style="color: #000000">&lt;</span> <span style="color: #000000">hibernate</span> <span style="color: #000000">-</span> <span style="color: #000000">configuration</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /> <br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">session</span> <span style="color: #000000">-</span> <span style="color: #000000">factory</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /> <br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;!--</span> <span style="color: #000000">&nbsp;Database&nbsp;connection&nbsp;settings&nbsp;</span> <span style="color: #000000">--&gt;</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">property&nbsp;name</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">connection.driver_class</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;</span> <span style="color: #000000">com.mysql.jdbc.Driver</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">property</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">property&nbsp;name</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">connection.url</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;</span> <span style="color: #000000">jdbc:mysql:</span> <span style="color: #008000">//</span> <span style="color: #008000">localhost:3306/eg&lt;/property&gt;</span> <span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /> </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">property&nbsp;name</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">connection.username</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;</span> <span style="color: #000000">root</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">property</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">property&nbsp;name</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">connection.password</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;</span> <span style="color: #000000">4864452</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">property</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /> <br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;!--</span> <span style="color: #000000">&nbsp;JDBC&nbsp;connection&nbsp;pool&nbsp;(use&nbsp;the&nbsp;built</span> <span style="color: #000000">-</span> <span style="color: #000000">in)&nbsp;</span> <span style="color: #000000">--&gt;</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">property&nbsp;name</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">connection.pool_size</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;</span> <span style="color: #000000">1</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">property</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /> <br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;!--</span> <span style="color: #000000">&nbsp;SQL&nbsp;dialect&nbsp;</span> <span style="color: #000000">--&gt;</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">property&nbsp;name</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">dialect</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;</span> <span style="color: #000000">org.hibernate.dialect.MySQLInnoDBDialect</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">property</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /> <br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;!--</span> <span style="color: #000000">&nbsp;Enable&nbsp;Hibernate</span> <span style="color: #000000">'</span> <span style="color: #000000">s&nbsp;automatic&nbsp;session&nbsp;context&nbsp;management&nbsp;--&gt;</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /> </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">property&nbsp;name</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">current_session_context_class</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;</span> <span style="color: #000000">thread</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">property</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /> <br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;!--</span> <span style="color: #000000">&nbsp;Disable&nbsp;the&nbsp;second</span> <span style="color: #000000">-</span> <span style="color: #000000">level&nbsp;cache&nbsp;&nbsp;</span> <span style="color: #000000">--&gt;</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">property&nbsp;name</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">cache.provider_class</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;</span> <span style="color: #000000">org.hibernate.cache.NoCacheProvider</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">property</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /> <br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;!--</span> <span style="color: #000000">&nbsp;Echo&nbsp;all&nbsp;executed&nbsp;SQL&nbsp;to&nbsp;stdout&nbsp;</span> <span style="color: #000000">--&gt;</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">property&nbsp;name</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">show_sql</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;</span> <span style="color: #0000ff">true</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">property</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /> <br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;!--</span> <span style="color: #000000">&nbsp;Drop&nbsp;and&nbsp;re</span> <span style="color: #000000">-</span> <span style="color: #000000">create&nbsp;the&nbsp;database&nbsp;schema&nbsp;on&nbsp;startup&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">property&nbsp;name</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">hbm2ddl.auto</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;</span> <span style="color: #000000">create</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">property</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">--&gt;</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">mapping&nbsp;resource</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">eg/Message.hbm.xml</span> <span style="color: #000000">"</span> <span style="color: #000000">/&gt;</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">session</span> <span style="color: #000000">-</span> <span style="color: #000000">factory</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /> <br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /> </span><span style="color: #000000">&lt;/</span> <span style="color: #000000">hibernate</span> <span style="color: #000000">-</span> <span style="color: #000000">configuration</span> <span style="color: #000000">&gt;</span> </div>
<p>2、源文件：</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /> <span style="color: #0000ff">package</span> <span style="color: #000000">&nbsp;eg;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img id="Codehighlighter1_34_673_Open_Image" onclick="this.style.display='none'; Codehighlighter1_34_673_Open_Text.style.display='none'; Codehighlighter1_34_673_Closed_Image.style.display='inline'; Codehighlighter1_34_673_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_34_673_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_34_673_Closed_Text.style.display='none'; Codehighlighter1_34_673_Open_Image.style.display='inline'; Codehighlighter1_34_673_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" /></span> <span style="color: #0000ff">public</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">class</span> <span style="color: #000000">&nbsp;Message&nbsp;</span> <span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_34_673_Closed_Text"><img src="http://www.blogjava.net/images/dot.gif"  alt="" /> </span><span id="Codehighlighter1_34_673_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">private</span> <span style="color: #000000">&nbsp;Long&nbsp;id;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">private</span> <span style="color: #000000">&nbsp;String&nbsp;text;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">private</span> <span style="color: #000000">&nbsp;Message&nbsp;nextMessage;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img id="Codehighlighter1_151_152_Open_Image" onclick="this.style.display='none'; Codehighlighter1_151_152_Open_Text.style.display='none'; Codehighlighter1_151_152_Closed_Image.style.display='inline'; Codehighlighter1_151_152_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_151_152_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_151_152_Closed_Text.style.display='none'; Codehighlighter1_151_152_Open_Image.style.display='inline'; Codehighlighter1_151_152_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">public</span> <span style="color: #000000">&nbsp;Message()&nbsp;</span> <span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_151_152_Closed_Text"><img src="http://www.blogjava.net/images/dot.gif"  alt="" /> </span><span id="Codehighlighter1_151_152_Open_Text"><span style="color: #000000">{}</span> </span><span style="color: #000000"><br />
<img id="Codehighlighter1_185_215_Open_Image" onclick="this.style.display='none'; Codehighlighter1_185_215_Open_Text.style.display='none'; Codehighlighter1_185_215_Closed_Image.style.display='inline'; Codehighlighter1_185_215_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /> <img style="display: none" id="Codehighlighter1_185_215_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_185_215_Closed_Text.style.display='none'; Codehighlighter1_185_215_Open_Image.style.display='inline'; Codehighlighter1_185_215_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">public</span> <span style="color: #000000">&nbsp;Message(String&nbsp;text)</span> <span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_185_215_Closed_Text"><img src="http://www.blogjava.net/images/dot.gif"  alt="" /> </span><span id="Codehighlighter1_185_215_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">this</span> <span style="color: #000000">.text</span> <span style="color: #000000">=</span> <span style="color: #000000">text;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span> </span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_253_282_Open_Image" onclick="this.style.display='none'; Codehighlighter1_253_282_Open_Text.style.display='none'; Codehighlighter1_253_282_Closed_Image.style.display='inline'; Codehighlighter1_253_282_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_253_282_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_253_282_Closed_Text.style.display='none'; Codehighlighter1_253_282_Open_Image.style.display='inline'; Codehighlighter1_253_282_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">public</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">void</span> <span style="color: #000000">&nbsp;setId(Long&nbsp;id)&nbsp;</span> <span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_253_282_Closed_Text"><img src="http://www.blogjava.net/images/dot.gif"  alt="" /> </span><span id="Codehighlighter1_253_282_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">this</span> <span style="color: #000000">.id&nbsp;</span> <span style="color: #000000">=</span> <span style="color: #000000">&nbsp;id;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span> </span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /> <br />
<img id="Codehighlighter1_322_355_Open_Image" onclick="this.style.display='none'; Codehighlighter1_322_355_Open_Text.style.display='none'; Codehighlighter1_322_355_Closed_Image.style.display='inline'; Codehighlighter1_322_355_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /> <img style="display: none" id="Codehighlighter1_322_355_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_322_355_Closed_Text.style.display='none'; Codehighlighter1_322_355_Open_Image.style.display='inline'; Codehighlighter1_322_355_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">public</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">void</span> <span style="color: #000000">&nbsp;setText(String&nbsp;text)&nbsp;</span> <span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_322_355_Closed_Text"><img src="http://www.blogjava.net/images/dot.gif"  alt="" /> </span><span id="Codehighlighter1_322_355_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">this</span> <span style="color: #000000">.text&nbsp;</span> <span style="color: #000000">=</span> <span style="color: #000000">&nbsp;text;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span> </span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /> <br />
<img id="Codehighlighter1_410_457_Open_Image" onclick="this.style.display='none'; Codehighlighter1_410_457_Open_Text.style.display='none'; Codehighlighter1_410_457_Closed_Image.style.display='inline'; Codehighlighter1_410_457_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /> <img style="display: none" id="Codehighlighter1_410_457_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_410_457_Closed_Text.style.display='none'; Codehighlighter1_410_457_Open_Image.style.display='inline'; Codehighlighter1_410_457_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">public</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">void</span> <span style="color: #000000">&nbsp;setNextMessage(Message&nbsp;nextMessage)&nbsp;</span> <span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_410_457_Closed_Text"><img src="http://www.blogjava.net/images/dot.gif"  alt="" /> </span><span id="Codehighlighter1_410_457_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">this</span> <span style="color: #000000">.nextMessage&nbsp;</span> <span style="color: #000000">=</span> <span style="color: #000000">&nbsp;nextMessage;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span> </span><span style="color: #000000"><br />
<img id="Codehighlighter1_486_519_Open_Image" onclick="this.style.display='none'; Codehighlighter1_486_519_Open_Text.style.display='none'; Codehighlighter1_486_519_Closed_Image.style.display='inline'; Codehighlighter1_486_519_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /> <img style="display: none" id="Codehighlighter1_486_519_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_486_519_Closed_Text.style.display='none'; Codehighlighter1_486_519_Open_Image.style.display='inline'; Codehighlighter1_486_519_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">public</span> <span style="color: #000000">&nbsp;Long&nbsp;getId()&nbsp;</span> <span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_486_519_Closed_Text"><img src="http://www.blogjava.net/images/dot.gif"  alt="" /> </span><span id="Codehighlighter1_486_519_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">return</span> <span style="color: #000000">&nbsp;(</span> <span style="color: #0000ff">this</span> <span style="color: #000000">.id);&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span> </span><span style="color: #000000"><br />
<img id="Codehighlighter1_552_587_Open_Image" onclick="this.style.display='none'; Codehighlighter1_552_587_Open_Text.style.display='none'; Codehighlighter1_552_587_Closed_Image.style.display='inline'; Codehighlighter1_552_587_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /> <img style="display: none" id="Codehighlighter1_552_587_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_552_587_Closed_Text.style.display='none'; Codehighlighter1_552_587_Open_Image.style.display='inline'; Codehighlighter1_552_587_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">public</span> <span style="color: #000000">&nbsp;String&nbsp;getText()&nbsp;</span> <span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_552_587_Closed_Text"><img src="http://www.blogjava.net/images/dot.gif"  alt="" /> </span><span id="Codehighlighter1_552_587_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">return</span> <span style="color: #000000">&nbsp;(</span> <span style="color: #0000ff">this</span> <span style="color: #000000">.text);&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span> </span><span style="color: #000000"><br />
<img id="Codehighlighter1_628_670_Open_Image" onclick="this.style.display='none'; Codehighlighter1_628_670_Open_Text.style.display='none'; Codehighlighter1_628_670_Closed_Image.style.display='inline'; Codehighlighter1_628_670_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /> <img style="display: none" id="Codehighlighter1_628_670_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_628_670_Closed_Text.style.display='none'; Codehighlighter1_628_670_Open_Image.style.display='inline'; Codehighlighter1_628_670_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">public</span> <span style="color: #000000">&nbsp;Message&nbsp;getNextMessage()&nbsp;</span> <span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_628_670_Closed_Text"><img src="http://www.blogjava.net/images/dot.gif"  alt="" /> </span><span id="Codehighlighter1_628_670_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">return</span> <span style="color: #000000">&nbsp;(</span> <span style="color: #0000ff">this</span> <span style="color: #000000">.nextMessage);&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span> </span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span> </span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /> </span></div>
<p>3、配置文件：Messsage.hbm.xml</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /> <span style="color: #000000">&lt;?</span> <span style="color: #000000">xml&nbsp;version</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">1.0</span> <span style="color: #000000">"</span> <span style="color: #000000">&nbsp;encoding</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">utf-8</span> <span style="color: #000000">"</span> <span style="color: #000000">?&gt;</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /> <br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /> </span><span style="color: #000000">&lt;!</span> <span style="color: #000000">DOCTYPE&nbsp;hibernate</span> <span style="color: #000000">-</span> <span style="color: #000000">mapping&nbsp;PUBLIC<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">"</span> <span style="color: #000000">-//Hibernate/Hibernate&nbsp;Mapping&nbsp;DTD&nbsp;3.0//EN</span> <span style="color: #000000">"</span> <span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">"</span> <span style="color: #000000">http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /> <br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /> </span><span style="color: #000000">&lt;</span> <span style="color: #000000">hibernate</span> <span style="color: #000000">-</span> <span style="color: #000000">mapping</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #0000ff">class</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name</span> <span style="color: #000000">="</span> <span style="color: #000000">eg.Message</span> <span style="color: #000000">"</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">MESSAGE</span> <span style="color: #000000">"</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /> <br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">id<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">id</span> <span style="color: #000000">"</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;column</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">MESSAGE_ID</span> <span style="color: #000000">"</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">java.lang.Long</span> <span style="color: #000000">"</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">generator&nbsp;</span> <span style="color: #0000ff">class</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">native</span> <span style="color: #000000">"</span> <span style="color: #000000">/&gt;</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">id</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">property<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">text</span> <span style="color: #000000">"</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">java.lang.String</span> <span style="color: #000000">"</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;update</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">true</span> <span style="color: #000000">"</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insert</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">true</span> <span style="color: #000000">"</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;column</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">MESSAGE_TEXT</span> <span style="color: #000000">"</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">/&gt;</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /> <br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">many</span> <span style="color: #000000">-</span> <span style="color: #000000">to</span> <span style="color: #000000">-</span> <span style="color: #000000">one<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">nextMessage</span> <span style="color: #000000">"</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">class</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">jmuse.eg.Message</span> <span style="color: #000000">"</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cascade</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">all</span> <span style="color: #000000">"</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outer</span> <span style="color: #000000">-</span> <span style="color: #000000">join</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">auto</span> <span style="color: #000000">"</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;update</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">true</span> <span style="color: #000000">"</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insert</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">true</span> <span style="color: #000000">"</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;column</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">NEXT_MESSAGE_ID</span> <span style="color: #000000">"</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">/&gt;</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /> <br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;/</span> <span style="color: #0000ff">class</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /> <br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /> </span><span style="color: #000000">&lt;/</span> <span style="color: #000000">hibernate</span> <span style="color: #000000">-</span> <span style="color: #000000">mapping</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /> </span></div>
<p>4、最后的包结构：<br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /> <span style="color: #000000">+</span> <span style="color: #000000">lib&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;antlr.jar&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cglib.jar&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;asm.jar&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;asm</span> <span style="color: #000000">-</span> <span style="color: #000000">attrs.jars&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;commons</span> <span style="color: #000000">-</span> <span style="color: #000000">collections.jar&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;commons</span> <span style="color: #000000">-</span> <span style="color: #000000">logging.jar&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hibernate3.jar&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jta.jar&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dom4j.jar&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log4j.jar&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />＋src&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">+</span> <span style="color: #000000">eg<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Message.java<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Message.hbm.xml<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestMessage.java<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hibernate.cfg.ml<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log4j.properties<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span> </div>
<p>5、测试：</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /> <span style="color: #000000">&nbsp;session.beginTransaction();<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Message&nbsp;m</span> <span style="color: #000000">=</span> <span style="color: #0000ff">new</span> <span style="color: #000000">&nbsp;Message(</span> <span style="color: #000000">"</span> <span style="color: #000000">hello,world</span> <span style="color: #000000">"</span> <span style="color: #000000">);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.save(m);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.getTransaction().commit();<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span> </div>
<p>&nbsp;你会发现在数据库中有一条信息了，id=1<br />
Hibernate的对象识别是通过对象的Id 来识别的：<br />
如：<br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /> <span style="color: #000000">我们刚才在数据库中保存了一个Id为1的Message对象。<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />如果：<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />session.beginTraction();<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />Message&nbsp;m</span> <span style="color: #000000">=</span> <span style="color: #0000ff">new</span> <span style="color: #000000">&nbsp;Message();<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />m.setId(</span> <span style="color: #0000ff">new</span> <span style="color: #000000">&nbsp;Long(</span> <span style="color: #000000">1</span> <span style="color: #000000">));<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />m.setText(</span> <span style="color: #000000">"</span> <span style="color: #000000">This&nbsp;is&nbsp;another&nbsp;greeting</span> <span style="color: #000000">"</span> <span style="color: #000000">);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />session.saveOrUpdate(m);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />sesion.getTraction.commit();<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span> </div>
你会发现Hibernate会自动的把刚才的对象进行更新，而不是保存一个新的对象。<br />
这个例子有点极端，呵呵。能说明问题就可以了。 
<img src ="http://www.blogjava.net/liubijin/aggbug/320014.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liubijin/" target="_blank">無所謂</a> 2010-05-04 11:30 <a href="http://www.blogjava.net/liubijin/archive/2010/05/04/320014.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate简单介绍与部署</title><link>http://www.blogjava.net/liubijin/archive/2010/05/04/320013.html</link><dc:creator>無所謂</dc:creator><author>無所謂</author><pubDate>Tue, 04 May 2010 03:29:00 GMT</pubDate><guid>http://www.blogjava.net/liubijin/archive/2010/05/04/320013.html</guid><wfw:comment>http://www.blogjava.net/liubijin/comments/320013.html</wfw:comment><comments>http://www.blogjava.net/liubijin/archive/2010/05/04/320013.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liubijin/comments/commentRss/320013.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liubijin/services/trackbacks/320013.html</trackback:ping><description><![CDATA[<ul class="summary">下面开始利用hibernate进行数据库的访问。 需求：实现对用户的增、删、改、查。为了方便，用户就2个属性 用户ID和用户名。</ul>
    <ul class="con">
        <p>
        <p>Hibernate有很多值得学习的地方,这里我们简单介绍一个Hibernate，重点介绍Hibernate部署，希望读者看后受益匪浅。</p>
        <p><strong>一. 什么是hibernate？</strong></p>
        <p>答：Hibernate是一个开放源代码的对象关系映射框架，它对JDBC进行了非常轻量级的对象封装，使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合，既可以在Java的客户端程序使用，也可以在Servlet/JSP的Web应用中使用，最具革命意义的是，Hibernate可以在应用EJB的J2EE架构中取代CMP，完成数据持久化的重任。</p>
        <p><strong>二. 快速构建。</strong></p>
        <p>在此先要说明一下。由于本人懒惰，记不住hibernate的配置选项，所以，此系列的实例都是使用myeclipse进行快速开发。各位对myeclipse不齿的，就请见谅。然后，数据库都是mysql。<br />
        下面开始利用hibernate进行数据库的访问。 <br />
        需求：实现对用户的增、删、改、查。为了方便，用户就2个属性 用户ID和用户名。实体模型如下：</p>
        <p align="center"><img style="background-color: #f5f8f3; zoom: 120%" class="fit-image" onmousewheel="javascript:return big(this)" name="picview" alt="预览图片" src="http://images.51cto.com/files/uploadimg/20090921/1531300.gif" width="140" onload="javascript:if(this.width />498)this.style.width=498;" height=110></p>
        <p>建立工程:HibernateQuickUse，并且建立包。如下：</p>
        <p align="center"><img style="background-color: #f5f8f3; zoom: 140%" class="fit-image" onmousewheel="javascript:return big(this)" name="picview" alt="预览图片" src="http://images.51cto.com/files/uploadimg/20090921/1531301.gif" width="140" onload="javascript:if(this.width />498)this.style.width=498;" height=110></p>
        <p>根据实体，创建类User，代码如下：</p>
        <pre>&nbsp;
        <pre>
        <ol class="dp-xml">
            <li class="alt"><span><span>package&nbsp;org.py.hib.quickstart; &nbsp;</span></span>
            <li><span>&nbsp;</span>
            <li class="alt"><span>/** &nbsp;</span>
            <li><span>&nbsp;*&nbsp;User&nbsp;entity. &nbsp;</span>
            <li class="alt"><span>&nbsp;*&nbsp;@author&nbsp;MyEclipse&nbsp;Persistence&nbsp;Tools &nbsp;</span>
            <li><span>&nbsp;*/ &nbsp;</span>
            <li class="alt"><span>&nbsp;</span>
            <li><span>@SuppressWarnings("serial") &nbsp;</span>
            <li class="alt"><span>public&nbsp;class&nbsp;User&nbsp;implements&nbsp;java.io.Serializable &nbsp;</span>
            <li><span>{ &nbsp;</span>
            <li class="alt"><span>&nbsp;private&nbsp;String&nbsp;id; &nbsp;</span>
            <li><span>&nbsp;private&nbsp;String&nbsp;name; &nbsp;</span>
            <li class="alt"><span>&nbsp;</span>
            <li><span>&nbsp;public&nbsp;User() &nbsp;</span>
            <li class="alt"><span>&nbsp;{ &nbsp;</span>
            <li><span>&nbsp;} &nbsp;</span>
            <li class="alt"><span>&nbsp;</span>
            <li><span>&nbsp;public&nbsp;String&nbsp;getId() &nbsp;</span>
            <li class="alt"><span>&nbsp;{ &nbsp;</span>
            <li><span>&nbsp;&nbsp;return&nbsp;this.id; &nbsp;</span>
            <li class="alt"><span>&nbsp;} &nbsp;</span>
            <li><span>&nbsp;</span>
            <li class="alt"><span>&nbsp;public&nbsp;void&nbsp;setId(String&nbsp;id) &nbsp;</span>
            <li><span>&nbsp;{ &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">this.id</font></span><span>&nbsp;=&nbsp;id; &nbsp;</span></span>
            <li><span>&nbsp;} &nbsp;</span>
            <li class="alt"><span>&nbsp;</span>
            <li><span>&nbsp;public&nbsp;String&nbsp;getName() &nbsp;</span>
            <li class="alt"><span>&nbsp;{ &nbsp;</span>
            <li><span>&nbsp;&nbsp;return&nbsp;this.name; &nbsp;</span>
            <li class="alt"><span>&nbsp;} &nbsp;</span>
            <li><span>&nbsp;</span>
            <li class="alt"><span>&nbsp;public&nbsp;void&nbsp;setName(String&nbsp;name) &nbsp;</span>
            <li><span>&nbsp;{ &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">this.name</font></span><span>&nbsp;=&nbsp;name; &nbsp;</span></span>
            <li><span>&nbsp;} &nbsp;</span>
            <li class="alt"><span>} &nbsp;</span></li>
        </ol>
        </pre>
        </pre>
        <p>根据hibernate实体，创建数据表。sql如下：</p>
        <pre>
        <ol class="dp-xml">
            <li class="alt"><span><span>use&nbsp;HibernateQuickUse; &nbsp;</span></span>
            <li><span>drop&nbsp;table&nbsp;if&nbsp;exists&nbsp;User; &nbsp;</span>
            <li class="alt"><span>&nbsp;</span>
            <li><span>create&nbsp;table&nbsp;user&nbsp;( &nbsp;</span>
            <li class="alt"><span>&nbsp;id&nbsp;varchar(32)&nbsp;primary&nbsp;key, &nbsp;</span>
            <li><span>&nbsp;name&nbsp;varchar(32) &nbsp;</span>
            <li class="alt"><span>); &nbsp;</span></li>
        </ol>
        </pre>
        <p>这里的id，我没有采用Integer auto_increment, 原因是为了数据库的数据能方便的导入到另外一种数据库里面，比方说：oracle。当然，这个是以牺牲部分效率为前提的。因为id是integer的，能更加快速查询。不过，从数据库会自动为 primary key 建立 index来看，效率也不会相差太多。<br />
        要想通过hibernate访问数据库。首先要建立描述数据库的文件：hibernate.cfg.xml。放到src下面。内容如下：</p>
        <pre>
        <ol class="dp-xml">
            <li class="alt"><span><strong><font color="#006699"><span class="tag"><?</span><span class="tag-name">xml</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">version</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">'1.0'</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">encoding</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">'UTF-8'</font></span><span class="tag"><strong><font color="#006699">?&gt;</font></strong></span><span>&nbsp;</span></span>
            <li><span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"-//Hibernate/Hibernate&nbsp;Configuration&nbsp;DTD&nbsp;3.0//EN" &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"</span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>&nbsp;</span></span>
            <li class="alt"><span>&nbsp;</span>
            <li><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">hibernate-configuration</span><span class="tag">&gt;</span></font></strong><span>&nbsp;</span></span>
            <li class="alt"><span>&nbsp;</span>
            <li><span>&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">session-factory</span><span class="tag">&gt;</span></font></strong><span>&nbsp;</span></span>
            <li class="alt"><span>&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"dialect"</font></span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>org.hibernate.dialect.MySQLDialect</span><strong><font color="#006699"><span class="tag"></< SPAN><span class="tag-name">property</span><span class="tag">&gt;</span></font></strong><span>&nbsp;</span></span>
            <li><span>&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"connection.url"</font></span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>jdbc:mysql://localhost:3306/hibernatequickUse</span><strong><font color="#006699"><span class="tag"></< SPAN><span class="tag-name">property</span><span class="tag">&gt;</span></font></strong><span>&nbsp;</span></span>
            <li class="alt"><span>&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"connection.username"</font></span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>root</span><strong><font color="#006699"><span class="tag"></< SPAN><span class="tag-name">property</span><span class="tag">&gt;</span></font></strong><span>&nbsp;</span></span>
            <li><span>&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"connection.password"</font></span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>root</span><strong><font color="#006699"><span class="tag"></< SPAN><span class="tag-name">property</span><span class="tag">&gt;</span></font></strong><span>&nbsp;</span></span>
            <li class="alt"><span>&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"connection.driver_class"</font></span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>com.mysql.jdbc.Driver</span><strong><font color="#006699"><span class="tag"></< SPAN><span class="tag-name">property</span><span class="tag">&gt;</span></font></strong><span>&nbsp;</span></span>
            <li><span>&nbsp;&nbsp; &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"show_sql"</font></span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>true</span><strong><font color="#006699"><span class="tag"></< SPAN><span class="tag-name">property</span><span class="tag">&gt;</span></font></strong><span>&nbsp;</span></span>
            <li><span>&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">mapping</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">resource</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"org/py/hib/quickstart/User.hbm.xml"</font></span><span>&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;</span></span>
            <li class="alt"><span>&nbsp;</span>
            <li><span>&nbsp; &nbsp;</span>
            <li class="alt"><span>&nbsp;</span><strong><font color="#006699"><span class="tag"></< SPAN><span class="tag-name">session-factory</span><span class="tag">&gt;</span></font></strong><span>&nbsp;</span></span>
            <li><span>&nbsp;</span>
            <li class="alt"><strong><font color="#006699"><span class="tag"></< SPAN><span class="tag-name">hibernate-configuration</span><span class="tag">&gt;</span></font></strong><span>&nbsp;</span></span>
            <li><span>&nbsp;</span></li>
        </ol>
        </pre>
        <p>说说上面的 "dialect", 这个对应着hibernate生成哪种数据库的sql。然后是："show_sql", 这个是为了调试时候输出sql语句到屏幕用的。</p>
        <p>注意"mapping resource"部分。这个部分表示你的 实体- 数据库 映射文件的位置。（什么是实体-数据库 映射文件，看下面。）</p>
        <p>实体-数据库映射文件 -- 主要是告诉hibernate，这个User类，对应着哪个table，User类里面的那个属性对应着table里面的哪个字段。我们可以建立 实体-数据库 的xml映射文件，也可以采用Annotations映射，但是目前只说xml映射方式。如下：</p>
        <pre>
        <ol class="dp-xml">
            <li class="alt"><span><strong><font color="#006699"><span class="tag"><?</span><span class="tag-name">xml</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">version</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"1.0"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">encoding</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"utf-8"</font></span><span class="tag"><strong><font color="#006699">?&gt;</font></strong></span><span>&nbsp;<span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">hibernate-mapping</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">class</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"org.py.hib.quickstart.User"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">table</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"user"</font></span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">id</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"id"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">type</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"java.lang.String"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">column</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"id"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">length</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"32"</font></span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">generator</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">class</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"uuid"</font></span><span>&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag"></< SPAN><span class="tag-name">id</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"name"</font></span><span>&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">type</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"java.lang.String"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">column</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"name"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">length</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"32"</font></span><span>&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag"></< SPAN><span class="tag-name">class</span><span class="tag">&gt;</span></font></strong><span>&nbsp;</span><strong><font color="#006699"><span class="tag"></< SPAN><span class="tag-name">hibernate-mapping</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp; &nbsp;</span></span></li>
        </ol>
        </pre>
        <p>上面的xml还是很好理解的。注意一个generator中的class，他可以有很多。我们这用的是uuid。什么是uuid。这个可以google一下。呵呵。google是最好的教科书。还能有很多其他的，比方说：native。具体的同样请教google。有了上面的准备，那么我们开始来测试一下。这里我们用junit。具体怎么使用junit，呵呵。答案我想大家都知道了，也不用我说了。其实我对test 和 使用它也不熟练。</p>
        <p>我把测试用力放到了test/org.py.hib.quickstart下面。代码如下：</p>
        <pre>
        <ol class="dp-xml">
            <li class="alt"><span><span>package&nbsp;org.py.hib.quickstart; &nbsp;</span></span>
            <li><span>&nbsp;</span>
            <li class="alt"><span>import&nbsp;junit.framework.Assert; &nbsp;</span>
            <li><span>import&nbsp;junit.framework.TestCase; &nbsp;</span>
            <li class="alt"><span>&nbsp;</span>
            <li><span>import&nbsp;org.hibernate.Session; &nbsp;</span>
            <li class="alt"><span>import&nbsp;org.hibernate.SessionFactory; &nbsp;</span>
            <li><span>import&nbsp;org.hibernate.Transaction; &nbsp;</span>
            <li class="alt"><span>import&nbsp;org.hibernate.cfg.Configuration; &nbsp;</span>
            <li><span>import&nbsp;org.junit.After; &nbsp;</span>
            <li class="alt"><span>import&nbsp;org.junit.Before; &nbsp;</span>
            <li><span>&nbsp;</span>
            <li class="alt"><span>public&nbsp;class&nbsp;QuickStartTest&nbsp;extends&nbsp;TestCase &nbsp;</span>
            <li><span>{ &nbsp;</span>
            <li class="alt"><span>&nbsp;SessionFactory&nbsp;factory; &nbsp;</span>
            <li><span>&nbsp;</span>
            <li class="alt"><span>&nbsp;String&nbsp;</span><span class="attribute"><font color="#ff0000">m_name</font></span><span>&nbsp;=&nbsp;</span><span class="attribute-value"><font color="#0000ff">"ryanpoy"</font></span><span>; &nbsp;</span></span>
            <li><span>&nbsp;</span>
            <li class="alt"><span>&nbsp;String&nbsp;</span><span class="attribute"><font color="#ff0000">m_name2</font></span><span>&nbsp;=&nbsp;</span><span class="attribute-value"><font color="#0000ff">"ryanpoy2"</font></span><span>; &nbsp;</span></span>
            <li><span>&nbsp;</span>
            <li class="alt"><span>&nbsp;@Before &nbsp;</span>
            <li><span>&nbsp;public&nbsp;void&nbsp;setUp()&nbsp;throws&nbsp;Exception &nbsp;</span>
            <li class="alt"><span>&nbsp;{ &nbsp;</span>
            <li><span>&nbsp;&nbsp;Configuration&nbsp;</span><span class="attribute"><font color="#ff0000">conf</font></span><span>&nbsp;=&nbsp;</span><span class="attribute-value"><font color="#0000ff">new</font></span><span>&nbsp;Configuration().configure(); &nbsp;</span></span>
            <li class="alt"><span>&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">factory</font></span><span>&nbsp;=&nbsp;</span><span class="attribute-value"><font color="#0000ff">conf</font></span><span>.buildSessionFactory(); &nbsp;</span></span>
            <li><span>&nbsp;} &nbsp;</span>
            <li class="alt"><span>&nbsp;</span>
            <li><span>&nbsp;/** &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;*&nbsp;测试添加 &nbsp;</span>
            <li><span>&nbsp;&nbsp;*&nbsp;@throws&nbsp;Exception &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;*/ &nbsp;</span>
            <li><span>&nbsp;public&nbsp;void&nbsp;testSave()&nbsp;throws&nbsp;Exception &nbsp;</span>
            <li class="alt"><span>&nbsp;{ &nbsp;</span>
            <li><span>&nbsp;&nbsp;System.out.println("\</span><span class="attribute"><font color="#ff0000">n</font></span><span>===&nbsp;test&nbsp;</span><span class="attribute"><font color="#ff0000">save</font></span><span>&nbsp;==="); &nbsp;</span></span>
            <li class="alt"><span>&nbsp;&nbsp;User&nbsp;</span><span class="attribute"><font color="#ff0000">u</font></span><span>&nbsp;=&nbsp;</span><span class="attribute-value"><font color="#0000ff">new</font></span><span>&nbsp;User(); &nbsp;</span></span>
            <li><span>&nbsp;&nbsp;u.setName(m_name);&nbsp;//&nbsp;设置用户名&nbsp;=&nbsp;m_name &nbsp;</span>
            <li class="alt"><span>&nbsp;</span>
            <li><span>&nbsp;&nbsp;Session&nbsp;</span><span class="attribute"><font color="#ff0000">session</font></span><span>&nbsp;=&nbsp;</span><span class="attribute-value"><font color="#0000ff">null</font></span><span>; &nbsp;</span></span>
            <li class="alt"><span>&nbsp;&nbsp;Transaction&nbsp;</span><span class="attribute"><font color="#ff0000">tran</font></span><span>&nbsp;=&nbsp;</span><span class="attribute-value"><font color="#0000ff">null</font></span><span>; &nbsp;</span></span>
            <li><span>&nbsp;&nbsp;try &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;{ &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">session</font></span><span>&nbsp;=&nbsp;</span><span class="attribute-value"><font color="#0000ff">factory</font></span><span>.openSession(); &nbsp;</span></span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">tran</font></span><span>&nbsp;=&nbsp;</span><span class="attribute-value"><font color="#0000ff">session</font></span><span>.beginTransaction(); &nbsp;</span></span>
            <li><span>&nbsp;&nbsp;&nbsp;session.save(u); &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;tran.commit(); &nbsp;</span>
            <li><span>&nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;Assert.assertEquals(u.getId()&nbsp;!=&nbsp;null,&nbsp;true); &nbsp;</span>
            <li><span>&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;ex) &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;{ &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;tran.rollback(); &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;throw&nbsp;ex; &nbsp;</span>
            <li><span>&nbsp;&nbsp;}&nbsp;finally &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;{ &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;if&nbsp;(session&nbsp;!=&nbsp;null) &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;{ &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;&nbsp;try &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close(); &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;ex) &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;nothing&nbsp;to&nbsp;do &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;finally &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(session&nbsp;!=&nbsp;null) &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">session</font></span><span>&nbsp;=&nbsp;</span><span class="attribute-value"><font color="#0000ff">null</font></span><span>; &nbsp;</span></span>
            <li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;} &nbsp;</span>
            <li><span>&nbsp;&nbsp;} &nbsp;</span>
            <li class="alt"><span>&nbsp;} &nbsp;</span>
            <li><span>&nbsp;</span>
            <li class="alt"><span>&nbsp;/** &nbsp;</span>
            <li><span>&nbsp;&nbsp;*&nbsp;测试查询 &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;*&nbsp;@throws&nbsp;Exception &nbsp;</span>
            <li><span>&nbsp;&nbsp;*/ &nbsp;</span>
            <li class="alt"><span>&nbsp;public&nbsp;void&nbsp;testFind()&nbsp;throws&nbsp;Exception &nbsp;</span>
            <li><span>&nbsp;{ &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;System.out.println("\</span><span class="attribute"><font color="#ff0000">n</font></span><span>===&nbsp;test&nbsp;</span><span class="attribute"><font color="#ff0000">find</font></span><span>&nbsp;==="); &nbsp;</span></span>
            <li><span>&nbsp;&nbsp;Session&nbsp;</span><span class="attribute"><font color="#ff0000">session</font></span><span>&nbsp;=&nbsp;</span><span class="attribute-value"><font color="#0000ff">null</font></span><span>; &nbsp;</span></span>
            <li class="alt"><span>&nbsp;&nbsp;try &nbsp;</span>
            <li><span>&nbsp;&nbsp;{ &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">session</font></span><span>&nbsp;=&nbsp;</span><span class="attribute-value"><font color="#0000ff">factory</font></span><span>.openSession(); &nbsp;</span></span>
            <li><span>&nbsp;&nbsp;&nbsp;User&nbsp;</span><span class="attribute"><font color="#ff0000">u</font></span><span>&nbsp;=&nbsp;(User)&nbsp;session.createQuery("from&nbsp;User").list().get(0); &nbsp;</span></span>
            <li class="alt"><span>&nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;Assert.assertEquals(true,&nbsp;u.getId()&nbsp;!=&nbsp;null); &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;Assert.assertEquals(m_name,&nbsp;u.getName()); &nbsp;</span>
            <li><span>&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;ex) &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;{ &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;throw&nbsp;ex; &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;}&nbsp;finally &nbsp;</span>
            <li><span>&nbsp;&nbsp;{ &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;if&nbsp;(session&nbsp;!=&nbsp;null) &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;{ &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;try &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close(); &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;ex) &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;nothing&nbsp;to&nbsp;do &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;finally &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(session&nbsp;!=&nbsp;null) &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">session</font></span><span>&nbsp;=&nbsp;</span><span class="attribute-value"><font color="#0000ff">null</font></span><span>; &nbsp;</span></span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;} &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;} &nbsp;</span>
            <li><span>&nbsp;} &nbsp;</span>
            <li class="alt"><span>&nbsp;</span>
            <li><span>&nbsp;/** &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;*&nbsp;测试修改 &nbsp;</span>
            <li><span>&nbsp;&nbsp;*&nbsp;@throws&nbsp;Exception &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;*/ &nbsp;</span>
            <li><span>&nbsp;public&nbsp;void&nbsp;testModify()&nbsp;throws&nbsp;Exception &nbsp;</span>
            <li class="alt"><span>&nbsp;{ &nbsp;</span>
            <li><span>&nbsp;&nbsp;System.out.println("\</span><span class="attribute"><font color="#ff0000">n</font></span><span>===&nbsp;test&nbsp;</span><span class="attribute"><font color="#ff0000">modify</font></span><span>&nbsp;==="); &nbsp;</span></span>
            <li class="alt"><span>&nbsp;&nbsp;Session&nbsp;</span><span class="attribute"><font color="#ff0000">session</font></span><span>&nbsp;=&nbsp;</span><span class="attribute-value"><font color="#0000ff">null</font></span><span>; &nbsp;</span></span>
            <li><span>&nbsp;&nbsp;Transaction&nbsp;</span><span class="attribute"><font color="#ff0000">tran</font></span><span>&nbsp;=&nbsp;</span><span class="attribute-value"><font color="#0000ff">null</font></span><span>; &nbsp;</span></span>
            <li class="alt"><span>&nbsp;&nbsp;try &nbsp;</span>
            <li><span>&nbsp;&nbsp;{ &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">session</font></span><span>&nbsp;=&nbsp;</span><span class="attribute-value"><font color="#0000ff">factory</font></span><span>.openSession(); &nbsp;</span></span>
            <li><span>&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">tran</font></span><span>&nbsp;=&nbsp;</span><span class="attribute-value"><font color="#0000ff">session</font></span><span>.beginTransaction(); &nbsp;</span></span>
            <li class="alt"><span>&nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;User&nbsp;</span><span class="attribute"><font color="#ff0000">u</font></span><span>&nbsp;=&nbsp;(User)&nbsp;session.createQuery("from&nbsp;User").list().get(0); &nbsp;</span></span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;u.setName(m_name2);&nbsp;&nbsp;//&nbsp;修改用户名&nbsp;=&nbsp;m_name2.（原来用户名=&nbsp;m_name） &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;tran.commit(); &nbsp;</span>
            <li class="alt"><span>&nbsp;</span>
            <li><span>&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;ex) &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;{ &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;throw&nbsp;ex; &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;}&nbsp;finally &nbsp;</span>
            <li><span>&nbsp;&nbsp;{ &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;if&nbsp;(session&nbsp;!=&nbsp;null) &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;{ &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;try &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close(); &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;ex) &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;nothing&nbsp;to&nbsp;do &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;finally &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(session&nbsp;!=&nbsp;null) &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">session</font></span><span>&nbsp;=&nbsp;</span><span class="attribute-value"><font color="#0000ff">null</font></span><span>; &nbsp;</span></span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;} &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;} &nbsp;</span>
            <li><span>&nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;/* &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;*&nbsp;修改后再查询 &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;*/ &nbsp;</span>
            <li><span>&nbsp;&nbsp;System.out.println("\</span><span class="attribute"><font color="#ff0000">n</font></span><span>===&nbsp;test&nbsp;find&nbsp;after&nbsp;</span><span class="attribute"><font color="#ff0000">modify</font></span><span>&nbsp;==="); &nbsp;</span></span>
            <li class="alt"><span>&nbsp;&nbsp;try &nbsp;</span>
            <li><span>&nbsp;&nbsp;{ &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">session</font></span><span>&nbsp;=&nbsp;</span><span class="attribute-value"><font color="#0000ff">factory</font></span><span>.openSession(); &nbsp;</span></span>
            <li><span>&nbsp;&nbsp;&nbsp;User&nbsp;</span><span class="attribute"><font color="#ff0000">u</font></span><span>&nbsp;=&nbsp;(User)&nbsp;session.createQuery("from&nbsp;User").list().get(0); &nbsp;</span></span>
            <li class="alt"><span>&nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;Assert.assertEquals(true,&nbsp;u.getId()&nbsp;!=&nbsp;null); &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;Assert.assertEquals(m_name2,&nbsp;u.getName()); &nbsp;</span>
            <li><span>&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;ex) &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;{ &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;throw&nbsp;ex; &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;}&nbsp;finally &nbsp;</span>
            <li><span>&nbsp;&nbsp;{ &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;if&nbsp;(session&nbsp;!=&nbsp;null) &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;{ &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;try &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close(); &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;ex) &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;nothing&nbsp;to&nbsp;do &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;finally &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(session&nbsp;!=&nbsp;null) &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">session</font></span><span>&nbsp;=&nbsp;</span><span class="attribute-value"><font color="#0000ff">null</font></span><span>; &nbsp;</span></span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;} &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;} &nbsp;</span>
            <li><span>&nbsp;} &nbsp;</span>
            <li class="alt"><span>&nbsp;</span>
            <li><span>&nbsp;/** &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;*&nbsp;测试删除 &nbsp;</span>
            <li><span>&nbsp;&nbsp;*&nbsp;@throws&nbsp;Exception &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;*/ &nbsp;</span>
            <li><span>&nbsp;public&nbsp;void&nbsp;testDelete()&nbsp;throws&nbsp;Exception &nbsp;</span>
            <li class="alt"><span>&nbsp;{ &nbsp;</span>
            <li><span>&nbsp;&nbsp;System.out.println("\</span><span class="attribute"><font color="#ff0000">n</font></span><span>===&nbsp;test&nbsp;</span><span class="attribute"><font color="#ff0000">delete</font></span><span>&nbsp;==="); &nbsp;</span></span>
            <li class="alt"><span>&nbsp;&nbsp;Session&nbsp;</span><span class="attribute"><font color="#ff0000">session</font></span><span>&nbsp;=&nbsp;</span><span class="attribute-value"><font color="#0000ff">null</font></span><span>; &nbsp;</span></span>
            <li><span>&nbsp;&nbsp;Transaction&nbsp;</span><span class="attribute"><font color="#ff0000">tran</font></span><span>&nbsp;=&nbsp;</span><span class="attribute-value"><font color="#0000ff">null</font></span><span>; &nbsp;</span></span>
            <li class="alt"><span>&nbsp;&nbsp;try &nbsp;</span>
            <li><span>&nbsp;&nbsp;{ &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">session</font></span><span>&nbsp;=&nbsp;</span><span class="attribute-value"><font color="#0000ff">factory</font></span><span>.openSession(); &nbsp;</span></span>
            <li><span>&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">tran</font></span><span>&nbsp;=&nbsp;</span><span class="attribute-value"><font color="#0000ff">session</font></span><span>.beginTransaction(); &nbsp;</span></span>
            <li class="alt"><span>&nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;User&nbsp;</span><span class="attribute"><font color="#ff0000">u</font></span><span>&nbsp;=&nbsp;(User)&nbsp;session.createQuery("from&nbsp;User").list().get(0); &nbsp;</span></span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;session.delete(u); &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;tran.commit(); &nbsp;</span>
            <li class="alt"><span>&nbsp;</span>
            <li><span>&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;ex) &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;{ &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;throw&nbsp;ex; &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;}&nbsp;finally &nbsp;</span>
            <li><span>&nbsp;&nbsp;{ &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;if&nbsp;(session&nbsp;!=&nbsp;null) &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;{ &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;try &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close(); &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;ex) &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;nothing&nbsp;to&nbsp;do &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;finally &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(session&nbsp;!=&nbsp;null) &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">session</font></span><span>&nbsp;=&nbsp;</span><span class="attribute-value"><font color="#0000ff">null</font></span><span>; &nbsp;</span></span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;} &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;} &nbsp;</span>
            <li><span>&nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;/* &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;*&nbsp;删除后再查询 &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;*/ &nbsp;</span>
            <li><span>&nbsp;&nbsp;System.out.println("\</span><span class="attribute"><font color="#ff0000">n</font></span><span>===&nbsp;test&nbsp;find&nbsp;after&nbsp;</span><span class="attribute"><font color="#ff0000">delete</font></span><span>&nbsp;==="); &nbsp;</span></span>
            <li class="alt"><span>&nbsp;&nbsp;try &nbsp;</span>
            <li><span>&nbsp;&nbsp;{ &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">session</font></span><span>&nbsp;=&nbsp;</span><span class="attribute-value"><font color="#0000ff">factory</font></span><span>.openSession(); &nbsp;</span></span>
            <li><span>&nbsp;&nbsp;&nbsp;Integer&nbsp;</span><span class="attribute"><font color="#ff0000">num</font></span><span>&nbsp;=&nbsp;(Integer)&nbsp;session.createQuery("from&nbsp;User").list().size(); &nbsp;</span></span>
            <li class="alt"><span>&nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;Assert.assertEquals(0,&nbsp;num.intValue()); &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;ex) &nbsp;</span>
            <li><span>&nbsp;&nbsp;{ &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;throw&nbsp;ex; &nbsp;</span>
            <li><span>&nbsp;&nbsp;}&nbsp;finally &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;{ &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;if&nbsp;(session&nbsp;!=&nbsp;null) &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;{ &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;&nbsp;try &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close(); &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;ex) &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;nothing&nbsp;to&nbsp;do &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;finally &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;</span>
            <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(session&nbsp;!=&nbsp;null) &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">session</font></span><span>&nbsp;=&nbsp;</span><span class="attribute-value"><font color="#0000ff">null</font></span><span>; &nbsp;</span></span>
            <li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;&nbsp;} &nbsp;</span>
            <li><span>&nbsp;&nbsp;} &nbsp;</span>
            <li class="alt"><span>&nbsp;} &nbsp;</span>
            <li><span>&nbsp;</span>
            <li class="alt"><span>&nbsp;/** &nbsp;</span>
            <li><span>&nbsp;&nbsp;*&nbsp; &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;*/ &nbsp;</span>
            <li><span>&nbsp;@After &nbsp;</span>
            <li class="alt"><span>&nbsp;public&nbsp;void&nbsp;tearDown()&nbsp;throws&nbsp;Exception &nbsp;</span>
            <li><span>&nbsp;{ &nbsp;</span>
            <li class="alt"><span>&nbsp;&nbsp;factory.close(); &nbsp;</span>
            <li><span>&nbsp;} &nbsp;</span>
            <li class="alt"><span>&nbsp;</span>
            <li><span>} &nbsp;</span></li>
        </ol>
        </pre>
        <p>运行后，我们很欣慰的看到一路绿灯，全部通过了。那么测试没有问题。呵呵(这里的测试可能还不完善。请大家指出。前面说过，我对测试这块也不熟)。<br />
        看控制台，会输出如下信息：</p>
        <pre>
        <ol class="dp-xml">
            <li class="alt"><span><span>===&nbsp;test&nbsp;</span><span class="attribute"><font color="#ff0000">save</font></span><span>&nbsp;=== &nbsp;</span></span>
            <li><span>Hibernate:&nbsp;insert&nbsp;into&nbsp;hibernatequickuse.user&nbsp;(name,&nbsp;id)&nbsp;values&nbsp;(?,&nbsp;?) &nbsp;</span>
            <li class="alt"><span>&nbsp;</span>
            <li><span>===&nbsp;test&nbsp;</span><span class="attribute"><font color="#ff0000">find</font></span><span>&nbsp;=== &nbsp;</span></span>
            <li class="alt"><span>Hibernate:&nbsp;select&nbsp;user0_.id&nbsp;as&nbsp;id2_,&nbsp;user0_.name&nbsp;as&nbsp;name2_&nbsp;from&nbsp;hibernatequickuse.user&nbsp;</span><span class="attribute"><font color="#ff0000">user0_</font></span><span>&nbsp;</span></span>
            <li><span>&nbsp;</span>
            <li class="alt"><span>===&nbsp;test&nbsp;</span><span class="attribute"><font color="#ff0000">modify</font></span><span>&nbsp;=== &nbsp;</span></span>
            <li><span>Hibernate:&nbsp;select&nbsp;user0_.id&nbsp;as&nbsp;id4_,&nbsp;user0_.name&nbsp;as&nbsp;name4_&nbsp;from&nbsp;hibernatequickuse.user&nbsp;user0_ &nbsp;</span>
            <li class="alt"><span>Hibernate:&nbsp;update&nbsp;hibernatequickuse.user&nbsp;set&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=?&nbsp;where&nbsp;</span><span class="attribute"><font color="#ff0000">id</font></span><span>=? &nbsp;</span></span>
            <li><span>&nbsp;</span>
            <li class="alt"><span>===&nbsp;test&nbsp;find&nbsp;after&nbsp;</span><span class="attribute"><font color="#ff0000">modify</font></span><span>&nbsp;=== &nbsp;</span></span>
            <li><span>Hibernate:&nbsp;select&nbsp;user0_.id&nbsp;as&nbsp;id4_,&nbsp;user0_.name&nbsp;as&nbsp;name4_&nbsp;from&nbsp;hibernatequickuse.user&nbsp;</span><span class="attribute"><font color="#ff0000">user0_</font></span><span>&nbsp;</span></span>
            <li class="alt"><span>&nbsp;</span>
            <li><span>===&nbsp;test&nbsp;</span><span class="attribute"><font color="#ff0000">delete</font></span><span>&nbsp;=== &nbsp;</span></span>
            <li class="alt"><span>Hibernate:&nbsp;select&nbsp;user0_.id&nbsp;as&nbsp;id6_,&nbsp;user0_.name&nbsp;as&nbsp;name6_&nbsp;from&nbsp;hibernatequickuse.user&nbsp;user0_ &nbsp;</span>
            <li><span>Hibernate:&nbsp;delete&nbsp;from&nbsp;hibernatequickuse.user&nbsp;where&nbsp;</span><span class="attribute"><font color="#ff0000">id</font></span><span>=? &nbsp;</span></span>
            <li class="alt"><span>&nbsp;</span>
            <li><span>===&nbsp;test&nbsp;find&nbsp;after&nbsp;</span><span class="attribute"><font color="#ff0000">delete</font></span><span>&nbsp;=== &nbsp;</span></span>
            <li class="alt"><span>Hibernate:&nbsp;select&nbsp;user0_.id&nbsp;as&nbsp;id6_,&nbsp;user0_.name&nbsp;as&nbsp;name6_&nbsp;from&nbsp;hibernatequickuse.user&nbsp;user0_ &nbsp;</span>
            <li><span>&nbsp;</span></li>
        </ol>
        </pre>
    </ul>
<img src ="http://www.blogjava.net/liubijin/aggbug/320013.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liubijin/" target="_blank">無所謂</a> 2010-05-04 11:29 <a href="http://www.blogjava.net/liubijin/archive/2010/05/04/320013.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate Sequence基础描述</title><link>http://www.blogjava.net/liubijin/archive/2010/05/04/320012.html</link><dc:creator>無所謂</dc:creator><author>無所謂</author><pubDate>Tue, 04 May 2010 03:28:00 GMT</pubDate><guid>http://www.blogjava.net/liubijin/archive/2010/05/04/320012.html</guid><wfw:comment>http://www.blogjava.net/liubijin/comments/320012.html</wfw:comment><comments>http://www.blogjava.net/liubijin/archive/2010/05/04/320012.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liubijin/comments/commentRss/320012.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liubijin/services/trackbacks/320012.html</trackback:ping><description><![CDATA[<ul class="summary">这里介绍Hibernate Sequence，包括介绍在Oracle sequence首先创建sequence create sequence seq_idminvalue 1start with 1increment by 1cache 20。</ul>
    <ul class="con">
        <p>Hibernate有很多值得学习的地方，这里我们主要介绍Hibernate Sequence，包括介绍Oracle sequence等方面。
        <p><strong>一、为表创建自增长自段有两种</strong></p>
        <p>一种是不同的表使用各自的Hibernate Sequence，方法如下：<br />
        1、在Oracle sequence首先创建sequence create sequence seq_idminvalue 1start with 1increment by 1cache 20；<br />
        2.在你的hbm.xml中的配置seq_id</p>
        <p>这样再插入数据的时候，Hibernate会自动生成如下语句：</p>
        <p>hibernate： select seq_id.nextval from dual hibernate： insert into YXJK.T_YXJK_WHRYTXL （XM0000， ZW0000， LXDH00， SJHM00， DZYJ00，IP0000， ID0000） values （？， ？， ？， ？， ？， ？， ？）</p>
        <p>自动生成下一个序列值，然后将对象插入表中。在使用的时候需要注意，Hibernate对于sequence的主键的要求是一定要是shor，long，或者integer.</p>
        <p><strong>二 还有一种方式是使用公共的sequence</strong></p>
        <p>这各时候可以不指定表使用的sequence，那么相应的hbm.xml中内容是：</p>
        <p>然后创建公用的Hibernate sequence对象，命名为 hibernate_sequence<br />
        ◆create sequence hibernate_sequence<br />
        ◆minvalue 0<br />
        ◆maxvalue 99999999<br />
        ◆start with 10000<br />
        ◆increment by 1；</p>
        <p><strong>三 注意事项</strong></p>
        <p>如果数据库是从sqlserver等其他数据库移植而来的，那么创建sequence时的起始值应该比当前表中最大的ID值大，否则会出现错误，因为sequence 不会维护是否和导库前现有的值重复。<br />
        1、sequence：用于Oracle数据库<br />
        2、native：跨数据库时使用，由底层方言产生。</p>
        <p>Default.sequence为hibernate_sequence</p>
        <p>注：使用native时Hibernate默认会去查找Oracle中的hibernate_sequence序列。如果Oracle中没有该序列，连Oracle数据库时会报错。</p>
    </ul>
<img src ="http://www.blogjava.net/liubijin/aggbug/320012.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liubijin/" target="_blank">無所謂</a> 2010-05-04 11:28 <a href="http://www.blogjava.net/liubijin/archive/2010/05/04/320012.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>错误：hibernate could not resolve property</title><link>http://www.blogjava.net/liubijin/archive/2010/05/04/320011.html</link><dc:creator>無所謂</dc:creator><author>無所謂</author><pubDate>Tue, 04 May 2010 03:25:00 GMT</pubDate><guid>http://www.blogjava.net/liubijin/archive/2010/05/04/320011.html</guid><wfw:comment>http://www.blogjava.net/liubijin/comments/320011.html</wfw:comment><comments>http://www.blogjava.net/liubijin/archive/2010/05/04/320011.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liubijin/comments/commentRss/320011.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liubijin/services/trackbacks/320011.html</trackback:ping><description><![CDATA[对于这个异常一般是因为映射文件造成的请逐一排查：<br />
1.hibernate.config.xml中添加的映射文件是否正确<br />
2.映射文件中的类是否正确指定。<br />
3.映射文件映射的属性名是否跟类中的属性名一致。<br />
4.映射文件映射的属性类型是否跟类中的属性一致。<br />
5.映射文件映射到属性在类里是否有GET,SET方法。<br />
6.如果类中的属性名有跟数据库关键字相同的（比如说desc），那么映射文件中的对应属性的列名要手动指定成别的名字。 
<img src ="http://www.blogjava.net/liubijin/aggbug/320011.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liubijin/" target="_blank">無所謂</a> 2010-05-04 11:25 <a href="http://www.blogjava.net/liubijin/archive/2010/05/04/320011.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>