﻿<?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-都市淘沙者-文章分类-Hibernate/ORM</title><link>http://www.blogjava.net/jelver/category/7668.html</link><description>每天进步一点点</description><language>zh-cn</language><lastBuildDate>Sun, 20 Feb 2011 12:57:30 GMT</lastBuildDate><pubDate>Sun, 20 Feb 2011 12:57:30 GMT</pubDate><ttl>60</ttl><item><title>简化开发-base类（泛型）</title><link>http://www.blogjava.net/jelver/articles/344686.html</link><dc:creator>冰河快狼</dc:creator><author>冰河快狼</author><pubDate>Sun, 20 Feb 2011 06:13:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/344686.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/344686.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/344686.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/344686.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/344686.html</trackback:ping><description><![CDATA[<div class="bct fc05 fc11 nbw-blog ztag js-fs2">
<p><span style="font-size: small"><strong>本文章主要讲了两个技巧,一是在Dao层中基本操作的复用，和Spring配置中的一些代码复用。</strong></span></p>
<p>&nbsp;</p>
<p>简明的说一下类的作用：</p>
<p>&nbsp;</p>
<p>BaseDao（接口类）：</p>
<p>实体中共有的增删改查操作的接口</p>
<p>&nbsp;</p>
<p>BaseHibernateDao（实现类）：继承HibernateDaoSupport，实现BaseDao接口</p>
<p>实现BaseDao类中的基本操作。</p>
<p>&nbsp;</p>
<p>UserDao（接口类）：继承BaseDao类</p>
<p>实体中除了基本操作的额外操作，用于扩充功能。</p>
<p>&nbsp;</p>
<p>UserHibernateDao（实现类）：继承BaseHibernateDao类，实现UserDao接口</p>
<p>实现UserDao类的操作。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>从上面的分析可以看出来，UserDao类是包含有全部的底层操作的接口，而UserHibernateDao类是实现了UserDao</p>
<p>类的全部操作。<span style="color: rgb(255,0,0)">实现了base类后，实际上是简化了实体通用的操作，只写一次就行了。。</span></p>
<p>&nbsp;</p>
<p>在ssh2 结构中，可以利用spring 对UserService 类进行注入UserDao类即可。如Spring的配置文件：&nbsp;</p>
<div><span style="color: rgb(255,0,0)">
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="daoTemplate"</span><span style="color: #ff0000">&nbsp;abstract</span><span style="color: #0000ff">="true"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="sessionFactory"</span><span style="color: #ff0000">&nbsp;ref</span><span style="color: #0000ff">="sessionFactory"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="userDao"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="dao.hibernate.UserHibernateDao"</span><span style="color: #ff0000">&nbsp;parent</span><span style="color: #0000ff">="daoTemplate"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="userService"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="service.imp.UserService"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="userDao"</span><span style="color: #ff0000">&nbsp;ref</span><span style="color: #0000ff">="userDao"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="***Dao"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="dao.hibernate.***HibernateDao"</span><span style="color: #ff0000">&nbsp;parent</span><span style="color: #0000ff">="daoTemplate"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="***Service"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="service.imp.UserService"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="***Dao"</span><span style="color: #ff0000">&nbsp;ref</span><span style="color: #0000ff">="***Dao"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
从这个配置文件上又有个 daoTemplate 的bean&nbsp;，这个bean 是一个抽象类，注入了sessionFactory，如果其他bean类继承它的话，就可以不用在为它注入sessionFactory了，，这个也是一个技巧，有点像Base类，功能都是实现代码的复用。。。</span></div>
<p>&nbsp;</p>
<p><strong></strong></p>
<p><strong><span style="font-size: small">下面是上面一些类的演示代码：</span></strong></p>
<p><strong><span style="color: rgb(255,0,0)">BaseDao</span></strong></p>
<p><strong><span style="color: rgb(255,0,0)"></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.io.Serializable;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.List;<br />
<img id="Codehighlighter1_104_339_Open_Image" onclick="this.style.display='none'; Codehighlighter1_104_339_Open_Text.style.display='none'; Codehighlighter1_104_339_Closed_Image.style.display='inline'; Codehighlighter1_104_339_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_104_339_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_104_339_Closed_Text.style.display='none'; Codehighlighter1_104_339_Open_Image.style.display='inline'; Codehighlighter1_104_339_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;BaseDao</span><span style="color: #000000">&lt;</span><span style="color: #000000">T,ID&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;Serializable</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_104_339_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_104_339_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;save(T&nbsp;entity);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;delete(T&nbsp;entity);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;deleteById(Class</span><span style="color: #000000">&lt;</span><span style="color: #000000">T</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;entityClass,ID&nbsp;id);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;update(T&nbsp;entity);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;T&nbsp;findById(Class</span><span style="color: #000000">&lt;</span><span style="color: #000000">T</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;entityClass,ID&nbsp;id);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;List</span><span style="color: #000000">&lt;</span><span style="color: #000000">T</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;findAll(Class</span><span style="color: #000000">&lt;</span><span style="color: #000000">T</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;entityClass);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p><br />
BaseHibernateDao<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;dao.base;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.io.Serializable;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.List;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.springframework.orm.hibernate3.support.HibernateDaoSupport;<br />
<img id="Codehighlighter1_251_885_Open_Image" onclick="this.style.display='none'; Codehighlighter1_251_885_Open_Text.style.display='none'; Codehighlighter1_251_885_Closed_Image.style.display='inline'; Codehighlighter1_251_885_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_251_885_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_251_885_Closed_Text.style.display='none'; Codehighlighter1_251_885_Open_Image.style.display='inline'; Codehighlighter1_251_885_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  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;BaseHibernateDao</span><span style="color: #000000">&lt;</span><span style="color: #000000">T,ID&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;Serializable</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;HibernateDaoSupport&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;BaseDao</span><span style="color: #000000">&lt;</span><span style="color: #000000">T,ID</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_251_885_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_251_885_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />@Override<br />
<img id="Codehighlighter1_292_338_Open_Image" onclick="this.style.display='none'; Codehighlighter1_292_338_Open_Text.style.display='none'; Codehighlighter1_292_338_Closed_Image.style.display='inline'; Codehighlighter1_292_338_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_292_338_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_292_338_Closed_Text.style.display='none'; Codehighlighter1_292_338_Open_Image.style.display='inline'; Codehighlighter1_292_338_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;delete(T&nbsp;entity)&nbsp;</span><span id="Codehighlighter1_292_338_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_292_338_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">this</span><span style="color: #000000">.getHibernateTemplate().delete(entity);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />@Override<br />
<img id="Codehighlighter1_402_444_Open_Image" onclick="this.style.display='none'; Codehighlighter1_402_444_Open_Text.style.display='none'; Codehighlighter1_402_444_Closed_Image.style.display='inline'; Codehighlighter1_402_444_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_402_444_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_402_444_Closed_Text.style.display='none'; Codehighlighter1_402_444_Open_Image.style.display='inline'; Codehighlighter1_402_444_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;deleteById(Class</span><span style="color: #000000">&lt;</span><span style="color: #000000">T</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;entityClass,&nbsp;ID&nbsp;id)&nbsp;</span><span id="Codehighlighter1_402_444_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_402_444_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />delete(</span><span style="color: #0000ff">this</span><span style="color: #000000">.findById(entityClass,&nbsp;id));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />@Override<br />
<img id="Codehighlighter1_503_565_Open_Image" onclick="this.style.display='none'; Codehighlighter1_503_565_Open_Text.style.display='none'; Codehighlighter1_503_565_Closed_Image.style.display='inline'; Codehighlighter1_503_565_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_503_565_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_503_565_Closed_Text.style.display='none'; Codehighlighter1_503_565_Open_Image.style.display='inline'; Codehighlighter1_503_565_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;T&nbsp;findById(Class</span><span style="color: #000000">&lt;</span><span style="color: #000000">T</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;entityClass,&nbsp;ID&nbsp;id)&nbsp;</span><span id="Codehighlighter1_503_565_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_503_565_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;(T)</span><span style="color: #0000ff">this</span><span style="color: #000000">.getHibernateTemplate().get(entityClass,&nbsp;id);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />@Override<br />
<img id="Codehighlighter1_622_713_Open_Image" onclick="this.style.display='none'; Codehighlighter1_622_713_Open_Text.style.display='none'; Codehighlighter1_622_713_Closed_Image.style.display='inline'; Codehighlighter1_622_713_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_622_713_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_622_713_Closed_Text.style.display='none'; Codehighlighter1_622_713_Open_Image.style.display='inline'; Codehighlighter1_622_713_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;List</span><span style="color: #000000">&lt;</span><span style="color: #000000">T</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;findAll(Class</span><span style="color: #000000">&lt;</span><span style="color: #000000">T</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;entityClass)&nbsp;</span><span id="Codehighlighter1_622_713_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_622_713_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />String&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">entityClass.getName();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.getHibernateTemplate().find(</span><span style="color: #000000">"</span><span style="color: #000000">from</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">name);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />@Override<br />
<img id="Codehighlighter1_752_796_Open_Image" onclick="this.style.display='none'; Codehighlighter1_752_796_Open_Text.style.display='none'; Codehighlighter1_752_796_Closed_Image.style.display='inline'; Codehighlighter1_752_796_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_752_796_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_752_796_Closed_Text.style.display='none'; Codehighlighter1_752_796_Open_Image.style.display='inline'; Codehighlighter1_752_796_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;save(T&nbsp;entity)&nbsp;</span><span id="Codehighlighter1_752_796_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_752_796_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">this</span><span style="color: #000000">.getHibernateTemplate().save(entity);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />@Override<br />
<img id="Codehighlighter1_837_883_Open_Image" onclick="this.style.display='none'; Codehighlighter1_837_883_Open_Text.style.display='none'; Codehighlighter1_837_883_Closed_Image.style.display='inline'; Codehighlighter1_837_883_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_837_883_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_837_883_Closed_Text.style.display='none'; Codehighlighter1_837_883_Open_Image.style.display='inline'; Codehighlighter1_837_883_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;update(T&nbsp;entity)&nbsp;</span><span id="Codehighlighter1_837_883_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_837_883_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">this</span><span style="color: #000000">.getHibernateTemplate().update(entity);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p><br />
<br />
</span></strong></p>
<p><span style="color: rgb(255,0,0)"><strong>UserDao</strong></span></p>
<p>&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;dao;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;dao.base.BaseDao;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;model.User;<br />
<img id="Codehighlighter1_111_170_Open_Image" onclick="this.style.display='none'; Codehighlighter1_111_170_Open_Text.style.display='none'; Codehighlighter1_111_170_Closed_Image.style.display='inline'; Codehighlighter1_111_170_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_111_170_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_111_170_Closed_Text.style.display='none'; Codehighlighter1_111_170_Open_Image.style.display='inline'; Codehighlighter1_111_170_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;UserDao&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;BaseDao</span><span style="color: #000000">&lt;</span><span style="color: #000000">User,Integer</span><span style="color: #000000">&gt;</span><span id="Codehighlighter1_111_170_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_111_170_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />User&nbsp;findUserByNameAndPass(String&nbsp;name,String&nbsp;password);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p>&nbsp;</p>
<p><span style="color: rgb(255,0,0)"><strong>&nbsp;UserHibernateDao</strong></span> </p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;dao.hibernate;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.List;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;model.User;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;dao.UserDao;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;dao.base.BaseHibernateDao;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_234_630_Open_Image" onclick="this.style.display='none'; Codehighlighter1_234_630_Open_Text.style.display='none'; Codehighlighter1_234_630_Closed_Image.style.display='inline'; Codehighlighter1_234_630_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_234_630_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_234_630_Closed_Text.style.display='none'; Codehighlighter1_234_630_Open_Image.style.display='inline'; Codehighlighter1_234_630_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  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;UserHibernateDao&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;BaseHibernateDao</span><span style="color: #000000">&lt;</span><span style="color: #000000">User,Integer</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;UserDao&nbsp;</span><span id="Codehighlighter1_234_630_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_234_630_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;@Override&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_328_621_Open_Image" onclick="this.style.display='none'; Codehighlighter1_328_621_Open_Text.style.display='none'; Codehighlighter1_328_621_Closed_Image.style.display='inline'; Codehighlighter1_328_621_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_328_621_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_328_621_Closed_Text.style.display='none'; Codehighlighter1_328_621_Open_Image.style.display='inline'; Codehighlighter1_328_621_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;User&nbsp;findUserByNameAndPass(String&nbsp;name,&nbsp;String&nbsp;password)&nbsp;</span><span id="Codehighlighter1_328_621_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_328_621_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
<img id="Codehighlighter1_491_505_Open_Image" onclick="this.style.display='none'; Codehighlighter1_491_505_Open_Text.style.display='none'; Codehighlighter1_491_505_Closed_Image.style.display='inline'; Codehighlighter1_491_505_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_491_505_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_491_505_Closed_Text.style.display='none'; Codehighlighter1_491_505_Open_Image.style.display='inline'; Codehighlighter1_491_505_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List</span><span style="color: #000000">&lt;</span><span style="color: #000000">User</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;us</span><span style="color: #000000">=</span><span style="color: #0000ff">this</span><span style="color: #000000">.getHibernateTemplate().find(</span><span style="color: #000000">"</span><span style="color: #000000">from&nbsp;User&nbsp;user&nbsp;where&nbsp;name=?&nbsp;and&nbsp;password=?</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Object[]</span><span id="Codehighlighter1_491_505_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_491_505_Open_Text"><span style="color: #000000">{name,password}</span></span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(us.size()</span><span style="color: #000000">==</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;us.get(</span><span style="color: #000000">0</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&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">null</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">&nbsp;</span></div>
</div>
<img src ="http://www.blogjava.net/jelver/aggbug/344686.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">冰河快狼</a> 2011-02-20 14:13 <a href="http://www.blogjava.net/jelver/articles/344686.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Unit tests with H2 and iBATIS</title><link>http://www.blogjava.net/jelver/articles/334100.html</link><dc:creator>冰河快狼</dc:creator><author>冰河快狼</author><pubDate>Sat, 09 Oct 2010 07:10:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/334100.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/334100.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/334100.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/334100.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/334100.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: source : http://tech.shopzilla.com/2010/05/unit-tests-with-h2-and-ibatis/Unit&nbsp;tests&nbsp;with&nbsp;H2&nbsp;and&nbsp;iBATISPosted&nbsp;by&nbsp;Steve&nbsp;Corwin&nbsp;Friday,&nbsp;May&nbsp;7t...&nbsp;&nbsp;<a href='http://www.blogjava.net/jelver/articles/334100.html'>阅读全文</a><img src ="http://www.blogjava.net/jelver/aggbug/334100.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">冰河快狼</a> 2010-10-09 15:10 <a href="http://www.blogjava.net/jelver/articles/334100.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DbUnit入门实战（转载） </title><link>http://www.blogjava.net/jelver/articles/334093.html</link><dc:creator>冰河快狼</dc:creator><author>冰河快狼</author><pubDate>Sat, 09 Oct 2010 06:20:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/334093.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/334093.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/334093.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/334093.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/334093.html</trackback:ping><description><![CDATA[<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><span style="color: #000000;">相信做过单元测试的人都会对JUnit非常的熟悉了，今天要介绍的DbUnit(http:</span><span style="color: #008000;">//</span><span style="color: #008000;">dbunit.sourceforge.net/)则是专门针对数据库测试的对JUnit的一个扩展，它可以将测试对象数据库置于一个测试轮回之间的状态。鉴于目前国内介绍DbUnit的系统教程比较少见，本文将分从理论和实例两个方面带你领略DbUnit的精彩世界。</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">DbUnit设计理念<br />
熟悉单元测试的开发人员都知道，在对数据库进行单元测试时候，通常采用的方案有运用模拟对象(mock&nbsp;objects)和stubs两种。通过隔离关联的数据库访问类，比如JDBC的相关操作类，来达到对数据库操作的模拟测试。然而某些特殊的系统，比如利用了EJB的CMP(container</span><span style="color: #000000;">-</span><span style="color: #000000;">managed&nbsp;persistence)的系统，数据库的访问对象是在最底层而且很隐蔽的，那么这两种解决方案对这些系统就显得力不从心了。<br />
DBUnit的设计理念就是在测试之前，备份数据库，然后给对象数据库植入我们需要的准备数据，最后，在测试完毕后，读入备份数据库，回溯到测试前的状态；<br />
而且又因为DBUnit是对JUnit的一种扩展，开发人员可以通过创建测试用例代码，在这些测试用例的生命周期内来对数据库的操作结果进行比较。<br />
DbUnit测试基本概念和流程<br />
基于DbUnit&nbsp;的测试的主要接口是IDataSet。IDataSet代表一个或多个表的数据。<br />
可以将数据库模式的全部内容表示为单个IDataSet&nbsp;实例。这些表本身由Itable&nbsp;实例来表示。<br />
IDataSet&nbsp;的实现有很多，每一个都对应一个不同的数据源或加载机制。最常用的几种&nbsp;IDataSet实现为：<br />
FlatXmlDataSet：数据的简单平面文件&nbsp;XML&nbsp;表示<br />
QueryDataSet：用&nbsp;SQL&nbsp;查询获得的数据<br />
DatabaseDataSet：数据库表本身内容的一种表示<br />
XlsDataSet&nbsp;：数据的excel表示<br />
一般而言，使用DbUnit进行单元测试的流程如下：<br />
</span><span style="color: #000000;">1</span><span style="color: #000000;">&nbsp;根据业务，做好测试用的准备数据和预想结果数据，通常准备成xml格式文件。<br />
</span><span style="color: #000000;">2</span><span style="color: #000000;">&nbsp;在setUp()方法里边备份数据库中的关联表。<br />
</span><span style="color: #000000;">3</span><span style="color: #000000;">&nbsp;在setUp()方法里边读入准备数据。<br />
</span><span style="color: #000000;">4</span><span style="color: #000000;">&nbsp;对测试类的对应测试方法进行实装:执行对象方法，把数据库的实际执行结果和预想结果进行比较。<br />
</span><span style="color: #000000;">5</span><span style="color: #000000;">&nbsp;在tearDown()方法里边,把数据库还原到测试前状态。<br />
DbUnit开发实例<br />
下面通过一个实例来说明DbUnit的实际运用。<br />
实例准备<br />
比如有一个学生表[student]，结构如下：<br />
<br />
</span><span style="color: #000000;">--------------------------------------------------------------------------------</span><span style="color: #000000;"><br />
id&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">(</span><span style="color: #000000;">4</span><span style="color: #000000;">)&nbsp;pk&nbsp;学号<br />
name&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">(</span><span style="color: #000000;">50</span><span style="color: #000000;">)&nbsp;姓名<br />
sex&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">(</span><span style="color: #000000;">1</span><span style="color: #000000;">)&nbsp;性别<br />
birthday&nbsp;date&nbsp;出生日期<br />
</span><span style="color: #000000;">--------------------------------------------------------------------------------</span><span style="color: #000000;"><br />
准备数据如下：<br />
</span><span style="color: #000000;">--------------------------------------------------------------------------------</span><span style="color: #000000;"><br />
id&nbsp;name&nbsp;sex&nbsp;birthday<br />
</span><span style="color: #000000;">0001</span><span style="color: #000000;">&nbsp;翁仔&nbsp;m&nbsp;</span><span style="color: #000000;">1979</span><span style="color: #000000;">-</span><span style="color: #000000;">12</span><span style="color: #000000;">-</span><span style="color: #000000;">31</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">0002</span><span style="color: #000000;">&nbsp;王翠花&nbsp;f&nbsp;</span><span style="color: #000000;">1982</span><span style="color: #000000;">-</span><span style="color: #000000;">08</span><span style="color: #000000;">-</span><span style="color: #000000;">09</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">--------------------------------------------------------------------------------</span><span style="color: #000000;"><br />
测试对象类为StudentOpe.java，里边有2个方法：<br />
findStudent(String&nbsp;id)&nbsp;:根据主键id找记录<br />
addStudent(Student&nbsp;student)&nbsp;：添加一条记录<br />
在测试addStudent方法时候，我们准备添加如下一条数据<br />
</span><span style="color: #000000;">--------------------------------------------------------------------------------</span><span style="color: #000000;"><br />
id&nbsp;name&nbsp;sex&nbsp;birthday<br />
</span><span style="color: #000000;">0088</span><span style="color: #000000;">&nbsp;王耳朵&nbsp;m&nbsp;</span><span style="color: #000000;">1982</span><span style="color: #000000;">-</span><span style="color: #000000;">01</span><span style="color: #000000;">-</span><span style="color: #000000;">01</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">--------------------------------------------------------------------------------</span><span style="color: #000000;"><br />
那么在执行该方法后，数据库的student表里的数据是这样的：<br />
</span><span style="color: #000000;">--------------------------------------------------------------------------------</span><span style="color: #000000;"><br />
id&nbsp;name&nbsp;sex&nbsp;birthday<br />
</span><span style="color: #000000;">0001</span><span style="color: #000000;">&nbsp;翁仔&nbsp;m&nbsp;</span><span style="color: #000000;">1979</span><span style="color: #000000;">-</span><span style="color: #000000;">12</span><span style="color: #000000;">-</span><span style="color: #000000;">31</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">0002</span><span style="color: #000000;">&nbsp;王翠花&nbsp;f&nbsp;</span><span style="color: #000000;">1982</span><span style="color: #000000;">-</span><span style="color: #000000;">08</span><span style="color: #000000;">-</span><span style="color: #000000;">09</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">0088</span><span style="color: #000000;">&nbsp;王耳朵&nbsp;m&nbsp;</span><span style="color: #000000;">1982</span><span style="color: #000000;">-</span><span style="color: #000000;">01</span><span style="color: #000000;">-</span><span style="color: #000000;">01</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">--------------------------------------------------------------------------------</span><span style="color: #000000;"><br />
然后我们说明如何对这2个方法进行单元测试。<br />
实例展开<br />
</span><span style="color: #000000;">1</span><span style="color: #000000;">&nbsp;把准备数据和预想数据转换成xml文件<br />
student_pre.xml<br />
<br />
</span><span style="color: #000000;">--------------------------------------------------------------------------------</span><span style="color: #000000;"><br />
</span><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;">gb2312</span><span style="color: #000000;">"</span><span style="color: #000000;">?&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">dataset</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">student&nbsp;id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">0001</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;name</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">翁仔</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;sex</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">m</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;birthday</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">1979-12-31</span><span style="color: #000000;">"</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">student&nbsp;id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">0002</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;name</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">王翠花</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;sex</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">f</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;birthday</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">1982-08-09</span><span style="color: #000000;">"</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">dataset</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">--------------------------------------------------------------------------------</span><span style="color: #000000;"><br />
student_exp.xml<br />
</span><span style="color: #000000;">--------------------------------------------------------------------------------</span><span style="color: #000000;"><br />
</span><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;">gb2312</span><span style="color: #000000;">"</span><span style="color: #000000;">?&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">dataset</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">student&nbsp;id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">0001</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;name</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">翁仔</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;sex</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">m</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;birthday</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">1979-12-31</span><span style="color: #000000;">"</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">student&nbsp;id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">0002</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;name</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">王翠花</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;sex</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">f</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;birthday</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">1982-08-09</span><span style="color: #000000;">"</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">student&nbsp;id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">0088</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;name</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">王耳朵</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;sex</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">m</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;birthday</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">1982-01-01</span><span style="color: #000000;">"</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">dataset</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">--------------------------------------------------------------------------------</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">2</span><span style="color: #000000;">&nbsp;实装setUp方法，详细见代码注释。<br />
<br />
</span><span style="color: #000000;">--------------------------------------------------------------------------------</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">protected</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;setUp()&nbsp;{<br />
IDatabaseConnection&nbsp;connection&nbsp;</span><span style="color: #000000;">=</span><span style="color: #0000ff;">null</span><span style="color: #000000;">;<br />
</span><span style="color: #0000ff;">try</span><span style="color: #000000;">{<br />
</span><span style="color: #0000ff;">super</span><span style="color: #000000;">.setUp();<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">本例使用postgresql数据库</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">Class.forName(</span><span style="color: #000000;">"</span><span style="color: #000000;">org.postgresql.Driver</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">连接DB</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">Connection&nbsp;conn</span><span style="color: #000000;">=</span><span style="color: #000000;">DriverManager.getConnection(</span><span style="color: #000000;">"</span><span style="color: #000000;">jdbc:postgresql:testdb.test</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">postgres</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">postgres</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">获得DB连接</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">connection&nbsp;</span><span style="color: #000000;">=</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;DatabaseConnection(conn);<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">对数据库中的操作对象表student进行备份</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">QueryDataSet&nbsp;backupDataSet&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;QueryDataSet(connection);<br />
backupDataSet.addTable(</span><span style="color: #000000;">"</span><span style="color: #000000;">student</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
file</span><span style="color: #000000;">=</span><span style="color: #000000;">File.createTempFile(</span><span style="color: #000000;">"</span><span style="color: #000000;">student_back</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">.xml</span><span style="color: #000000;">"</span><span style="color: #000000;">);</span><span style="color: #008000;">//</span><span style="color: #008000;">备份文件</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">FlatXmlDataSet.write(backupDataSet,</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;FileOutputStream(file));<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">准备数据的读入</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">IDataSet&nbsp;dataSet&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;FlatXmlDataSet(&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;FileInputStream(</span><span style="color: #000000;">"</span><span style="color: #000000;">student_pre.xml</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br />
DatabaseOperation.CLEAN_INSERT.execute(connection,dataSet);<br />
}</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">(Exception&nbsp;e){<br />
e.printStackTrace();<br />
}</span><span style="color: #0000ff;">finally</span><span style="color: #000000;">{<br />
</span><span style="color: #0000ff;">try</span><span style="color: #000000;">{<br />
</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(connection</span><span style="color: #000000;">!=</span><span style="color: #0000ff;">null</span><span style="color: #000000;">)&nbsp;connection.close();<br />
}</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">(SQLException&nbsp;e){}<br />
}<br />
}<br />
</span><span style="color: #000000;">--------------------------------------------------------------------------------</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">3</span><span style="color: #000000;">&nbsp;实装测试方法，详细见代码注释。<br />
</span><span style="color: #000000;">*</span><span style="color: #000000;">检索类方法，可以利用assertEquals()方法，拿表的字段进行比较。<br />
</span><span style="color: #000000;">--------------------------------------------------------------------------------</span><span style="color: #000000;"><br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;findStudent</span><span style="color: #008000;"><br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;testFindStudent()&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;Exception{<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">执行findStudent方法</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">StudentOpe&nbsp;studentOpe</span><span style="color: #000000;">=</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;StudentOpe();<br />
Student&nbsp;result&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;studentOpe.findStudent(</span><span style="color: #000000;">"</span><span style="color: #000000;">0001</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">预想结果和实际结果的比较</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">assertEquals(</span><span style="color: #000000;">"</span><span style="color: #000000;">翁仔</span><span style="color: #000000;">"</span><span style="color: #000000;">,result.getName());<br />
assertEquals(</span><span style="color: #000000;">"</span><span style="color: #000000;">m</span><span style="color: #000000;">"</span><span style="color: #000000;">,result.getSex());<br />
assertEquals(</span><span style="color: #000000;">"</span><span style="color: #000000;">1979-12-31</span><span style="color: #000000;">"</span><span style="color: #000000;">,result.getBirthDay());<br />
}<br />
</span><span style="color: #000000;">--------------------------------------------------------------------------------</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">*</span><span style="color: #000000;">更新，添加，删除等方法，可以利用Assertion.assertEquals()方法，拿表的整体来比较。<br />
</span><span style="color: #000000;">--------------------------------------------------------------------------------</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;testAddStudent()&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;Exception{<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">执行addStudent方法</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">StudentOpe&nbsp;studentOpe</span><span style="color: #000000;">=</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;StudentOpe();<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">被追加的记录</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">Student&nbsp;newStudent&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Student(</span><span style="color: #000000;">"</span><span style="color: #000000;">0088</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">王耳朵</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">m</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">1982-01-01</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">执行追加方法</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">Student&nbsp;result&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;studentOpe.addStudent(newStudent);<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">预想结果和实际结果的比较</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">IDatabaseConnection&nbsp;connection</span><span style="color: #000000;">=</span><span style="color: #0000ff;">null</span><span style="color: #000000;">;<br />
</span><span style="color: #0000ff;">try</span><span style="color: #000000;">{<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">预期结果取得</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">IDataSet&nbsp;expectedDataSet&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;FlatXmlDataSet(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;FileInputStream(</span><span style="color: #000000;">"</span><span style="color: #000000;">student_exp.xml</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br />
ITable&nbsp;expectedTable&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;expectedDataSet.getTable(</span><span style="color: #000000;">"</span><span style="color: #000000;">student</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">实际结果取得</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">Connection&nbsp;conn</span><span style="color: #000000;">=</span><span style="color: #000000;">getConnection();<br />
connection&nbsp;</span><span style="color: #000000;">=</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;DatabaseConnection(conn);<br />
IDataSet&nbsp;databaseDataSet&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;connection.createDataSet();<br />
ITable&nbsp;actualTable&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;databaseDataSet.getTable(</span><span style="color: #000000;">"</span><span style="color: #000000;">student</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">比较</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">Assertion.assertEquals(expectedTable,&nbsp;actualTable);<br />
}</span><span style="color: #0000ff;">finally</span><span style="color: #000000;">{<br />
</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(connection</span><span style="color: #000000;">!=</span><span style="color: #0000ff;">null</span><span style="color: #000000;">)&nbsp;connection.close();<br />
}<br />
}<br />
</span><span style="color: #000000;">--------------------------------------------------------------------------------</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">*</span><span style="color: #000000;">如果在整体比较表的时候，有个别字段不需要比较，可以用DefaultColumnFilter.excludedColumnsTable()方法，<br />
将指定字段给排除在比较范围之外。比如上例中不需要比较birthday这个字段的话，那么可以如下代码所示进行处理：<br />
</span><span style="color: #000000;">--------------------------------------------------------------------------------</span><span style="color: #000000;"><br />
ITable&nbsp;filteredExpectedTable&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;DefaultColumnFilter.excludedColumnsTable(expectedTable,&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;String[]{</span><span style="color: #000000;">"</span><span style="color: #000000;">birthday</span><span style="color: #000000;">"</span><span style="color: #000000;">});<br />
ITable&nbsp;filteredActualTable&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;DefaultColumnFilter.excludedColumnsTable(actualTable,</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;String[]{</span><span style="color: #000000;">"</span><span style="color: #000000;">birthday</span><span style="color: #000000;">"</span><span style="color: #000000;">});<br />
Assertion.assertEquals(filteredExpectedTable,&nbsp;filteredActualTable);<br />
</span><span style="color: #000000;">--------------------------------------------------------------------------------</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">4</span><span style="color: #000000;">&nbsp;在tearDown()方法里边,把数据库还原到测试前状态<br />
</span><span style="color: #000000;">--------------------------------------------------------------------------------</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">protected</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;tearDown()&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;Exception{<br />
IDatabaseConnection&nbsp;connection&nbsp;</span><span style="color: #000000;">=</span><span style="color: #0000ff;">null</span><span style="color: #000000;">;<br />
</span><span style="color: #0000ff;">try</span><span style="color: #000000;">{<br />
</span><span style="color: #0000ff;">super</span><span style="color: #000000;">.tearDown();<br />
Connection&nbsp;conn</span><span style="color: #000000;">=</span><span style="color: #000000;">getConnection();<br />
connection&nbsp;</span><span style="color: #000000;">=</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;DatabaseConnection(conn);<br />
IDataSet&nbsp;dataSet&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;FlatXmlDataSet(file);<br />
DatabaseOperation.CLEAN_INSERT.execute(connection,dataSet);<br />
}</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">(Exception&nbsp;e){<br />
e.printStackTrace();<br />
}</span><span style="color: #0000ff;">finally</span><span style="color: #000000;">{<br />
</span><span style="color: #0000ff;">try</span><span style="color: #000000;">{<br />
</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(connection</span><span style="color: #000000;">!=</span><span style="color: #0000ff;">null</span><span style="color: #000000;">)&nbsp;connection.close();<br />
}</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">(SQLException&nbsp;e){}<br />
}<br />
}<br />
<br />
</span></div>
<img src ="http://www.blogjava.net/jelver/aggbug/334093.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">冰河快狼</a> 2010-10-09 14:20 <a href="http://www.blogjava.net/jelver/articles/334093.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate与缓存技术</title><link>http://www.blogjava.net/jelver/articles/233294.html</link><dc:creator>冰河快狼</dc:creator><author>冰河快狼</author><pubDate>Thu, 09 Oct 2008 02:38:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/233294.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/233294.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/233294.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/233294.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/233294.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 对于Hibernate这类ORM而言,缓存显的尤为重要,它是持久层性能提升的关键.简单来讲Hibernate就是对JDBC进行封装,以实现内部状态的管理,OR关系的映射等,但随之带来的就是数据访问效率的降低,和性能的下降,而缓存就是弥补这一缺点的重要方法.&nbsp;&nbsp;&nbsp;&nbsp;缓存就是数据库数据在内存中的临时容器,包括数据库数据在内存中的临时拷贝,它位于数据库与数...&nbsp;&nbsp;<a href='http://www.blogjava.net/jelver/articles/233294.html'>阅读全文</a><img src ="http://www.blogjava.net/jelver/aggbug/233294.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">冰河快狼</a> 2008-10-09 10:38 <a href="http://www.blogjava.net/jelver/articles/233294.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate中映射blob数据类型的一个例子 (zhuan)</title><link>http://www.blogjava.net/jelver/articles/168261.html</link><dc:creator>冰河快狼</dc:creator><author>冰河快狼</author><pubDate>Mon, 17 Dec 2007 08:25:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/168261.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/168261.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/168261.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/168261.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/168261.html</trackback:ping><description><![CDATA[<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">java&nbsp;代码<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img id="Codehighlighter1_59_3020_Open_Image" onclick="this.style.display='none'; Codehighlighter1_59_3020_Open_Text.style.display='none'; Codehighlighter1_59_3020_Closed_Image.style.display='inline'; Codehighlighter1_59_3020_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_59_3020_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_59_3020_Closed_Text.style.display='none'; Codehighlighter1_59_3020_Open_Image.style.display='inline'; Codehighlighter1_59_3020_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  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;User&nbsp;&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;java.io.Serializable&nbsp;</span><span id="Codehighlighter1_59_3020_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_59_3020_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Fields&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">long</span><span style="color: #000000">&nbsp;id;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;name;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;email;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;addr;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">定义Blob的pthto&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #008080">12</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Blob&nbsp;photo;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />xml&nbsp;代码<br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  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">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">org.tie.User</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;table</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">user</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;catalog</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">tie</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">id&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">&nbsp;type</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">long</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">column&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">&nbsp;</span><span style="color: #000000">/&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  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">identity</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">20</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  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">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  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">name</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;type</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">string</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">22</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">column&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">name</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;length</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">45</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;not</span><span style="color: #000000">-</span><span style="color: #0000ff">null</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">&nbsp;</span><span style="color: #000000">/&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">23</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  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">email</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;type</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">string</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">25</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">column&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">email</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;length</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">45</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">26</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">27</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  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">addr</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;type</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">string</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">28</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">column&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">addr</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;length</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">45</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">29</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">30</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;!--</span><span style="color: #000000">&nbsp;映射blob类型&nbsp;</span><span style="color: #000000">--&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">31</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  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">photo</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;type</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">blob</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">32</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">column&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">photo</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">33</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">34</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&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">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">35</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  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">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">36</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">37</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />两个测试方法:<br />
</span><span style="color: #008080">38</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">39</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />java&nbsp;代码<br />
</span><span style="color: #008080">40</span><span style="color: #000000"><img id="Codehighlighter1_1099_1976_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1099_1976_Open_Text.style.display='none'; Codehighlighter1_1099_1976_Closed_Image.style.display='inline'; Codehighlighter1_1099_1976_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1099_1976_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1099_1976_Closed_Text.style.display='none'; Codehighlighter1_1099_1976_Open_Image.style.display='inline'; Codehighlighter1_1099_1976_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;testCreate()</span><span id="Codehighlighter1_1099_1976_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1099_1976_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">41</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">42</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;User();&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">43</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setName(</span><span style="color: #000000">"</span><span style="color: #000000">linweiyang</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">44</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setAddr(</span><span style="color: #000000">"</span><span style="color: #000000">beijing</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">45</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setEmail(</span><span style="color: #000000">"</span><span style="color: #000000">linweiyang@163.com</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">46</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Blob&nbsp;photo&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">47</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">48</span><span style="color: #000000"><img id="Codehighlighter1_1332_1542_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1332_1542_Open_Text.style.display='none'; Codehighlighter1_1332_1542_Closed_Image.style.display='inline'; Codehighlighter1_1332_1542_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1332_1542_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1332_1542_Closed_Text.style.display='none'; Codehighlighter1_1332_1542_Open_Image.style.display='inline'; Codehighlighter1_1332_1542_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_1332_1542_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1332_1542_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">49</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">将图片读进输入流&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #008080">50</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileInputStream&nbsp;fis&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;FileInputStream(</span><span style="color: #000000">"</span><span style="color: #000000">c:\\a.jpg</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">51</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">转成Blob类型&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #008080">52</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;photo&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Hibernate.createBlob(fis);&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">53</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">54</span><span style="color: #000000"><img id="Codehighlighter1_1576_1627_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1576_1627_Open_Text.style.display='none'; Codehighlighter1_1576_1627_Closed_Image.style.display='inline'; Codehighlighter1_1576_1627_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1576_1627_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1576_1627_Closed_Text.style.display='none'; Codehighlighter1_1576_1627_Open_Image.style.display='inline'; Codehighlighter1_1576_1627_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(FileNotFoundException&nbsp;e)&nbsp;</span><span id="Codehighlighter1_1576_1627_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1576_1627_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">55</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">56</span><span style="color: #000000"><img id="Codehighlighter1_1651_1702_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1651_1702_Open_Text.style.display='none'; Codehighlighter1_1651_1702_Closed_Image.style.display='inline'; Codehighlighter1_1651_1702_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1651_1702_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1651_1702_Closed_Text.style.display='none'; Codehighlighter1_1651_1702_Open_Image.style.display='inline'; Codehighlighter1_1651_1702_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(IOException&nbsp;e)&nbsp;</span><span id="Codehighlighter1_1651_1702_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1651_1702_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">57</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">58</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">59</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">60</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setPhoto(photo);&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">61</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">62</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;factory.openSession();&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">63</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;tr&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;session.beginTransaction();&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">64</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.save(user);&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">65</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tr.commit();&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">66</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">67</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">68</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">69</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">70</span><span style="color: #000000"><img id="Codehighlighter1_2020_3016_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2020_3016_Open_Text.style.display='none'; Codehighlighter1_2020_3016_Closed_Image.style.display='inline'; Codehighlighter1_2020_3016_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_2020_3016_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2020_3016_Closed_Text.style.display='none'; Codehighlighter1_2020_3016_Open_Image.style.display='inline'; Codehighlighter1_2020_3016_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  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;testRerieve()</span><span id="Codehighlighter1_2020_3016_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_2020_3016_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">71</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">72</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;factory.openSession();&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">73</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(User)session.load(User.</span><span style="color: #0000ff">class</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Long(</span><span style="color: #000000">3</span><span style="color: #000000">));&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">74</span><span style="color: #000000"><img id="Codehighlighter1_2173_2730_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2173_2730_Open_Text.style.display='none'; Codehighlighter1_2173_2730_Closed_Image.style.display='inline'; Codehighlighter1_2173_2730_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_2173_2730_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2173_2730_Closed_Text.style.display='none'; Codehighlighter1_2173_2730_Open_Image.style.display='inline'; Codehighlighter1_2173_2730_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_2173_2730_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_2173_2730_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">75</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">从数据库中要读取出来&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #008080">76</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStream&nbsp;is&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;user.getPhoto().getBinaryStream();&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">77</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">在把写到一个图片格式的文件里&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #008080">78</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileOutputStream&nbsp;fos&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;FileOutputStream(</span><span style="color: #000000">"</span><span style="color: #000000">c:\\linweihan.jpg</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">79</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">80</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">byte</span><span style="color: #000000">[]&nbsp;buffer&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">byte</span><span style="color: #000000">[</span><span style="color: #000000">1024</span><span style="color: #000000">];&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">81</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;len&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">82</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">从数据库中读取到指定的字节数组中&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #008080">83</span><span style="color: #008000"><img id="Codehighlighter1_2570_2716_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2570_2716_Open_Text.style.display='none'; Codehighlighter1_2570_2716_Closed_Image.style.display='inline'; Codehighlighter1_2570_2716_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_2570_2716_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2570_2716_Closed_Text.style.display='none'; Codehighlighter1_2570_2716_Open_Image.style.display='inline'; Codehighlighter1_2570_2716_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">((len&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;is.read(buffer)&nbsp;)</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">)</span><span id="Codehighlighter1_2570_2716_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_2570_2716_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">84</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">从指定的数组中读取，然后输出来，所以这里buffer好象是连接inputStream和outputStream的一个东西&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #008080">85</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fos.write(buffer,</span><span style="color: #000000">0</span><span style="color: #000000">,len);&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">86</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">87</span><span style="color: #000000"><img id="Codehighlighter1_2764_2815_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2764_2815_Open_Text.style.display='none'; Codehighlighter1_2764_2815_Closed_Image.style.display='inline'; Codehighlighter1_2764_2815_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_2764_2815_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2764_2815_Closed_Text.style.display='none'; Codehighlighter1_2764_2815_Open_Image.style.display='inline'; Codehighlighter1_2764_2815_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(FileNotFoundException&nbsp;e)&nbsp;</span><span id="Codehighlighter1_2764_2815_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_2764_2815_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">88</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">89</span><span style="color: #000000"><img id="Codehighlighter1_2840_2891_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2840_2891_Open_Text.style.display='none'; Codehighlighter1_2840_2891_Closed_Image.style.display='inline'; Codehighlighter1_2840_2891_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_2840_2891_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2840_2891_Closed_Text.style.display='none'; Codehighlighter1_2840_2891_Open_Image.style.display='inline'; Codehighlighter1_2840_2891_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(SQLException&nbsp;e)&nbsp;</span><span id="Codehighlighter1_2840_2891_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_2840_2891_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">90</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">91</span><span style="color: #000000"><img id="Codehighlighter1_2915_2966_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2915_2966_Open_Text.style.display='none'; Codehighlighter1_2915_2966_Closed_Image.style.display='inline'; Codehighlighter1_2915_2966_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_2915_2966_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2915_2966_Closed_Text.style.display='none'; Codehighlighter1_2915_2966_Open_Image.style.display='inline'; Codehighlighter1_2915_2966_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(IOException&nbsp;&nbsp;e)</span><span id="Codehighlighter1_2915_2966_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_2915_2966_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">92</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">93</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">94</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">95</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span></div>
</span>
<p><font size="3">这么理解输入输出流</font></p>
<p><font size="3">读入流,自然要有读入的源头,</font></p>
<p><font size="3">输出也要输出到某个地方,输出一般是先要输读入,</font></p>
<p><font size="3">这里连接输入和输出的是一个在内存中的字节数组buffer.这样从数据库中读到这个数组里,输出流在从这个数组中输出到特定的文件格式里.</font></p>
<img src ="http://www.blogjava.net/jelver/aggbug/168261.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">冰河快狼</a> 2007-12-17 16:25 <a href="http://www.blogjava.net/jelver/articles/168261.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用Jakarta Commons组件beanutils、dbutils简化JDBC数据库操作（转）</title><link>http://www.blogjava.net/jelver/articles/166515.html</link><dc:creator>冰河快狼</dc:creator><author>冰河快狼</author><pubDate>Sun, 09 Dec 2007 13:30:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/166515.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/166515.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/166515.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/166515.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/166515.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 关键字：beanutils、dbutils、JDBC&nbsp;数据库摘要：本文简单介绍了Jakarta&nbsp;Commons旗下beanutils、dbutils在基于JDBC&nbsp;API数据库存取操作中的运用。&nbsp;&nbsp;&nbsp; 虽然现在出现了很多ORM框架，可是还是有很多朋友也许还在使用JDBC，就像我现在一样，除了学习的时候在使用Hibernate、Sp...&nbsp;&nbsp;<a href='http://www.blogjava.net/jelver/articles/166515.html'>阅读全文</a><img src ="http://www.blogjava.net/jelver/aggbug/166515.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">冰河快狼</a> 2007-12-09 21:30 <a href="http://www.blogjava.net/jelver/articles/166515.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用开源项目Hibernate开发Blog系统</title><link>http://www.blogjava.net/jelver/articles/165126.html</link><dc:creator>冰河快狼</dc:creator><author>冰河快狼</author><pubDate>Tue, 04 Dec 2007 03:50:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/165126.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/165126.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/165126.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/165126.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/165126.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 开发工具采用MYECLIPS3.6,首先是建立项目，导入STRUTS+HIBERNATE包，然后配置SRC跟目录下的hibernate.cfg.xml.我采用的是MYSQL数据库，所以配置如下：＜hibernate-configuration＞＜session-factory＞＜!-- properties --＞＜property name="connection.use...&nbsp;&nbsp;<a href='http://www.blogjava.net/jelver/articles/165126.html'>阅读全文</a><img src ="http://www.blogjava.net/jelver/aggbug/165126.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">冰河快狼</a> 2007-12-04 11:50 <a href="http://www.blogjava.net/jelver/articles/165126.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利于ThreadLocal管理Hibernate Session (zhuan)</title><link>http://www.blogjava.net/jelver/articles/165070.html</link><dc:creator>冰河快狼</dc:creator><author>冰河快狼</author><pubDate>Tue, 04 Dec 2007 01:28:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/165070.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/165070.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/165070.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/165070.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/165070.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 在利用Hibernate开发DAO模块时，我们和Session打的交道最多，所以如何合理的管理Session，避免Session的频繁创建和销毁，对于提高系统的性能来说是非常重要的，以往是通过eclipse的插件来自动完成这些代码的，当然效果是不错的，但是总是觉得不爽(没有读懂那些冗长的代码)，所以现在打算自己实现Session管理的代码。我们知道Session是由SessionFactory负责创建的，而SessionFactory的实现是线程安全的，多个并发的线程可以同时访问一个SessionFactory并从中获取Session实例，那么Session是否是线程安全的呢？很遗憾，答案是否定的。Session中包含了数据库操作相关的状态信息，那么说如果多个线程同时使用一个Session实例进行CRUD，就很有可能导致数据存取的混乱，你能够想像那些你根本不能预测执行顺序的线程对你的一条记录进行操作的情形吗？<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img id="Codehighlighter1_25_655_Open_Image" onclick="this.style.display='none'; Codehighlighter1_25_655_Open_Text.style.display='none'; Codehighlighter1_25_655_Closed_Image.style.display='inline'; Codehighlighter1_25_655_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_25_655_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_25_655_Closed_Text.style.display='none'; Codehighlighter1_25_655_Open_Image.style.display='inline'; Codehighlighter1_25_655_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;ThreadLocal&nbsp;</span><span id="Codehighlighter1_25_655_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_25_655_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Map&nbsp;values&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Collections.synchronizedMap(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;HashMap());&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img id="Codehighlighter1_130_459_Open_Image" onclick="this.style.display='none'; Codehighlighter1_130_459_Open_Text.style.display='none'; Codehighlighter1_130_459_Closed_Image.style.display='inline'; Codehighlighter1_130_459_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_130_459_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_130_459_Closed_Text.style.display='none'; Codehighlighter1_130_459_Open_Image.style.display='inline'; Codehighlighter1_130_459_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />　&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Object&nbsp;get()&nbsp;</span><span id="Codehighlighter1_130_459_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_130_459_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread&nbsp;currentThread&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Thread.currentThread();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　&nbsp;Object&nbsp;result&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;values.get(currentThread);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img id="Codehighlighter1_315_420_Open_Image" onclick="this.style.display='none'; Codehighlighter1_315_420_Open_Text.style.display='none'; Codehighlighter1_315_420_Closed_Image.style.display='inline'; Codehighlighter1_315_420_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_315_420_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_315_420_Closed_Text.style.display='none'; Codehighlighter1_315_420_Open_Image.style.display='inline'; Codehighlighter1_315_420_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(result&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">&amp;&amp;!</span><span style="color: #000000">values.containsKey(currentThread))&nbsp;</span><span id="Codehighlighter1_315_420_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_315_420_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;initialValue();&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;values.put(currentThread,&nbsp;result);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;result;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />　&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img id="Codehighlighter1_503_572_Open_Image" onclick="this.style.display='none'; Codehighlighter1_503_572_Open_Text.style.display='none'; Codehighlighter1_503_572_Closed_Image.style.display='inline'; Codehighlighter1_503_572_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_503_572_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_503_572_Closed_Text.style.display='none'; Codehighlighter1_503_572_Open_Image.style.display='inline'; Codehighlighter1_503_572_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  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;set(Object&nbsp;newValue)&nbsp;</span><span id="Codehighlighter1_503_572_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_503_572_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;values.put(Thread.currentThread(),&nbsp;newValue);&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />　&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img id="Codehighlighter1_612_649_Open_Image" onclick="this.style.display='none'; Codehighlighter1_612_649_Open_Text.style.display='none'; Codehighlighter1_612_649_Closed_Image.style.display='inline'; Codehighlighter1_612_649_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_612_649_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_612_649_Closed_Text.style.display='none'; Codehighlighter1_612_649_Open_Image.style.display='inline'; Codehighlighter1_612_649_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;　&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Object&nbsp;initialValue()&nbsp;</span><span id="Codehighlighter1_612_649_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_612_649_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />　&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span></div>
<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img id="Codehighlighter1_27_1112_Open_Image" onclick="this.style.display='none'; Codehighlighter1_27_1112_Open_Text.style.display='none'; Codehighlighter1_27_1112_Closed_Image.style.display='inline'; Codehighlighter1_27_1112_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_27_1112_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_27_1112_Closed_Text.style.display='none'; Codehighlighter1_27_1112_Open_Image.style.display='inline'; Codehighlighter1_27_1112_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;HibernateUtil&nbsp;</span><span id="Codehighlighter1_27_1112_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_27_1112_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;SessionFactory&nbsp;sessionFactory;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img id="Codehighlighter1_109_396_Open_Image" onclick="this.style.display='none'; Codehighlighter1_109_396_Open_Text.style.display='none'; Codehighlighter1_109_396_Closed_Image.style.display='inline'; Codehighlighter1_109_396_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_109_396_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_109_396_Closed_Text.style.display='none'; Codehighlighter1_109_396_Open_Image.style.display='inline'; Codehighlighter1_109_396_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_109_396_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_109_396_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img id="Codehighlighter1_130_280_Open_Image" onclick="this.style.display='none'; Codehighlighter1_130_280_Open_Text.style.display='none'; Codehighlighter1_130_280_Closed_Image.style.display='inline'; Codehighlighter1_130_280_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_130_280_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_130_280_Closed_Text.style.display='none'; Codehighlighter1_130_280_Open_Image.style.display='inline'; Codehighlighter1_130_280_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_130_280_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_130_280_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sessionFactory&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Configuration().configure()&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.buildSessionFactory();&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img id="Codehighlighter1_303_383_Open_Image" onclick="this.style.display='none'; Codehighlighter1_303_383_Open_Text.style.display='none'; Codehighlighter1_303_383_Closed_Image.style.display='inline'; Codehighlighter1_303_383_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_303_383_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_303_383_Closed_Text.style.display='none'; Codehighlighter1_303_383_Open_Image.style.display='inline'; Codehighlighter1_303_383_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Throwable&nbsp;ex)&nbsp;</span><span id="Codehighlighter1_303_383_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_303_383_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ExceptionInInitializerError(ex);&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;ThreadLocal&nbsp;session&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ThreadLocal();&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img id="Codehighlighter1_595_839_Open_Image" onclick="this.style.display='none'; Codehighlighter1_595_839_Open_Text.style.display='none'; Codehighlighter1_595_839_Closed_Image.style.display='inline'; Codehighlighter1_595_839_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_595_839_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_595_839_Closed_Text.style.display='none'; Codehighlighter1_595_839_Open_Image.style.display='inline'; Codehighlighter1_595_839_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;Session&nbsp;currentSession()&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;HibernateException&nbsp;</span><span id="Codehighlighter1_595_839_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_595_839_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;s&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;session.get();&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img id="Codehighlighter1_676_797_Open_Image" onclick="this.style.display='none'; Codehighlighter1_676_797_Open_Text.style.display='none'; Codehighlighter1_676_797_Closed_Image.style.display='inline'; Codehighlighter1_676_797_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_676_797_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_676_797_Closed_Text.style.display='none'; Codehighlighter1_676_797_Open_Image.style.display='inline'; Codehighlighter1_676_797_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(s&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_676_797_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_676_797_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;sessionFactory.openSession();&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.set(s);&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;s;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">20</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img id="Codehighlighter1_912_1106_Open_Image" onclick="this.style.display='none'; Codehighlighter1_912_1106_Open_Text.style.display='none'; Codehighlighter1_912_1106_Closed_Image.style.display='inline'; Codehighlighter1_912_1106_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_912_1106_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_912_1106_Closed_Text.style.display='none'; Codehighlighter1_912_1106_Open_Image.style.display='inline'; Codehighlighter1_912_1106_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;closeSession()&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;HibernateException&nbsp;</span><span id="Codehighlighter1_912_1106_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_912_1106_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">22</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;s&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;session.get();&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">23</span><span style="color: #000000"><img id="Codehighlighter1_995_1054_Open_Image" onclick="this.style.display='none'; Codehighlighter1_995_1054_Open_Text.style.display='none'; Codehighlighter1_995_1054_Closed_Image.style.display='inline'; Codehighlighter1_995_1054_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_995_1054_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_995_1054_Closed_Text.style.display='none'; Codehighlighter1_995_1054_Open_Image.style.display='inline'; Codehighlighter1_995_1054_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(s&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_995_1054_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_995_1054_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.close();&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">25</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">26</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.set(</span><span style="color: #0000ff">null</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">27</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">28</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">29</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在Session的众多管理方案中，我们今天来认识一种名为ThreadLocal模式的解决方案。<br />
&nbsp;&nbsp; &nbsp;&nbsp; 早在Java1.2推出之时，Java平台中就引入了一个新的支持：java.lang.ThreadLocal，给我们在编写多线程程序时提供了一种新的选择。ThreadLocal是什么呢？其实ThreadLocal并非是一个线程的本地实现版本，它并不是一个Thread，而是thread local variable(线程局部变量)。也许把它命名为ThreadLocalVar更加合适。线程局部变量(ThreadLocal)其实的功用非常简单，就是为每一个使用该变量的线程都提供一个变量值的副本，是每一个线程都可以独立地改变自己的副本，而不会和其它线程的副本冲突。从线程的角度看，就好像每一个线程都完全拥有一个该变量。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ThreadLocal是如何做到为每一个线程维护变量的副本的呢？其实实现的思路很简单，在ThreadLocal类中有一个Map，用于存储每一个线程的变量的副本。比如下面的示例实现(为了简单，没有考虑集合的泛型)：<font face="Arial">&nbsp;</font>&nbsp; 只要借助上面的工具类获取Session实例，我们就可以实现线程范围内的Session共享，从而避免了线程中频繁的创建和销毁Session实例。当然，不要忘记在用完后关闭Session。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;写到这里，想再多说一些，也许大多数时候我们的DAO并不会涉及到多线程的情形，比如我们不会将DAO的代码写在Servlet之中，那样不是良好的设计，我自己通常会在service层的代码里访问DAO的方法。但是我还是建议采用以上的工具类来管理Session，毕竟我们不能仅仅考虑今天为自己做什么，还应该考虑明天为自己做什么！
<img src ="http://www.blogjava.net/jelver/aggbug/165070.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">冰河快狼</a> 2007-12-04 09:28 <a href="http://www.blogjava.net/jelver/articles/165070.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于XDoclet的Hibernate3企业级开发教程 one2one映射类型（转）</title><link>http://www.blogjava.net/jelver/articles/34774.html</link><dc:creator>冰河快狼</dc:creator><author>冰河快狼</author><pubDate>Sat, 11 Mar 2006 01:05:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/34774.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/34774.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/34774.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/34774.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/34774.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 摘要：此为我给公司内部新员工培训的实战演示例子，傻瓜级教程，讲述了开发中的注意要点和常见错误，目的主要是让他们适应企业级快速流水作业。由于是面对面讲解，所以没有详细的文档，现在简单整理如下，希望对入门者有帮助。培训的目标：对下面的开发过程和模式快速理解和应用。基于我的UML架构-----〉Java POJOs代码------〉在pojos中做xdoclet标识-------〉基于ant生成*....&nbsp;&nbsp;<a href='http://www.blogjava.net/jelver/articles/34774.html'>阅读全文</a><img src ="http://www.blogjava.net/jelver/aggbug/34774.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">冰河快狼</a> 2006-03-11 09:05 <a href="http://www.blogjava.net/jelver/articles/34774.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>符合oo惯例的表现层控制 [曹晓钢]</title><link>http://www.blogjava.net/jelver/articles/33457.html</link><dc:creator>冰河快狼</dc:creator><author>冰河快狼</author><pubDate>Fri, 03 Mar 2006 05:59:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/33457.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/33457.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/33457.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/33457.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/33457.html</trackback:ping><description><![CDATA[符合<A href="http://dev.21tx.com/java/" target=_blank><FONT color=#3366cc>Java</FONT></A>惯例的O/R 持久化，这揭示了目前三层结构的重大问题，就是三层的不统一。到目前为止，仍然难于在<A href="http://dev.21tx.com/web/" target=_blank><FONT color=#3366cc>Web</FONT></A>界面上实现C/S模式中"master-detail"，"lookup"的快捷的用户交互。
<P>目前常见的web application的结构，包含web browser/application server/database。database占据主流的仍然是经典的E/R模型，这个模型是基于行集的，因此在<A href="http://dev.21tx.com/language/vb/" target=_blank><FONT color=#3366cc>VB</FONT></A>/<A href="http://dev.21tx.com/language/delphi/" target=_blank><FONT color=#3366cc>Delphi</FONT></A>/<A href="http://dev.21tx.com/language/pb/" target=_blank><FONT color=#3366cc>Power Builder</FONT></A>的实践中，data source/table set都是基于行集的，odbc/<A href="http://dev.21tx.com/java/adv/jdbc/" target=_blank><FONT color=#3366cc>JDBC</FONT></A> driver也都是基于行集的。view层的DbGrid也是基于行集的，和Entity模型对应得非常好，开发简易直观，相信这是C/S模式得到迅速推广的重点原因之一。“master-detail”,"lookup"都是C/S模式下极为常见和直观的关联模式。</P>
<P>但本质上，Object pascal/java都是面向对象的。在此，就出现了一次重大的不统一：OO vs E-R。出现的解决方式就是<A href="http://dev.21tx.com/java/ejb/" target=_blank><FONT color=#3366cc>EJB</FONT></A>和O/R mapping 工具。EJB的entity bean是早期的entity封装形式。但是和现在以hibernate为代表的先进工具（对POJO执行持久化）比较起来，在OO与ER的对应上显得笨重而难于使用。在这些工具中，代表OO与E-R融合的最本质的功能则是继承树与表结构的对应关系。hibernate2支持整棵继承树与一个表对应、继承树中每个类与一个表对应两种基本的对应关系，而hibernate 3引入的join标记则更可以将二者融合，实现每个类可选与基类在同一个表中持久或者在新表中保存部分持久数据，可以说hibernate 3把这个对应的任务完成得非常出色。"master-detail","lookup"则对应hbm.<A href="http://dev.21tx.com/web/xml/" target=_blank><FONT color=#3366cc>XML</FONT></A>这样的映射文件中的"one-many","many-one"关联。</P>
<P>database与java的融合完成之后，下一步，不可避免的就是现有的web client与<A href="http://www.21tx.com/server/" target=_blank><FONT color=#3366cc>服务器</FONT></A>端代码之间的融合。从表面上看，web client大多采用html/<A href="http://dev.21tx.com/web/javascript/" target=_blank><FONT color=#3366cc>JavaScript</FONT></A>完成，而服务器端采用java输出，二者是简单的命令/反馈的模型，这个模型从model 1发展到M<A href="http://dev.21tx.com/language/vc/" target=_blank><FONT color=#3366cc>VC</FONT></A>的模型后，编写代码变得清晰，但是开发人员仍然发现，编写web app仍然不是一件简单的事情。<A href="http://dev.21tx.com/java/struts/" target=_blank><FONT color=#3366cc>Struts</FONT></A>/webwork仍然只是非常底层的基础，对编写客户端业务对象没有什么帮助。比如说,在服务器端java程序建模时，大家已经习惯用pojo分析订单/客户/产品，但是在编写web client时，struts/webwork都只能帮助你完成页面提交/反馈的流程，却不能帮助你分析客户端业务：新建订单时，选择了客户之后，判断此客户是否有足够的预收款，这样一个简单用例在程序员心目中的反映仍然是每个字段的input tag,每个页面post上来的model,以及如何用action的处理再次渲染下一个页面。</P>
<P>最大的问题，就是作为表现层的web client端代码与服务器端代码蕴含的语义脱节。具体表现在：<BR>&nbsp;在采用struts/webwork这样的MVC结构的时候，通常不会考虑在客户端进行业务控制，比如由javascipt判断预收款是否足够。因此需要不断的多次页面刷新才能完成整个逻辑。</P>
<P>要解决此问题，通常可以采用把业务逻辑部分转移到客户端，以javascript + xmlhttp或javascript + web service,java <A href="http://dev.21tx.com/java/applet/" target=_blank><FONT color=#3366cc>Applet</FONT></A>/application,甚至采用<A href="http://dev.21tx.com/corp/office/" target=_blank><FONT color=#3366cc>Office</FONT></A>平台(嵌入代码到excel)完成整个业务逻辑。也有很多问题：</P>
<P>1，若要在客户端实现业务逻辑，可能客户端代码没有对应Pojo这样的基础object设施。javascript缺乏如interface这样的基础结构。excel方案在这点更加难于进行，因为整个开发涉及到的语言太多，造成开发难度加大，项目控制困难。<BR>直接后果就是，难于在客户端代码中定义"master-detail","lookup"等关联。就算在项目规划中在javascript中定义pojo(plain old javascript object)及其关联，也难于利用hbm.xml这样的现成关联描述。</P>
<P>2，客户端基础设施难于进行界面元素绑定。在处理大量数据时，excel方案在此体现出杰出的优势，客户对内置程序的excel的接受程度非常高，但缺点是这种excel程序难于做到xmlhttp可以轻松做到的动态查询等特性。</P>
<P>3，客户端基础设施难于与服务器端进行交互。xmlhttp以及web service可选，但是在企业应用中其低下效率可能会带来服务器的压力隐患，降低性能和吞吐量。若excel方案，则同样面临着与服务器数据交互的难题。不管是xmlhttp方案还是application方案，都面临着抛弃struts/webwork重新实现request/response dispatch的要求。</P>
<P>4，客户端基础设施难于进行单元测试。有junit4js，port了junit 3.8.1，但没有成熟的stub/mock工具。excel方案在此几乎不可测试。</P>
<P>5, 客户端基础设施难于调试。javascript缺乏类似log4j这样的log工具(log4js <A href="http://www.petrusrex.com/Programmes/jslib.htm"><FONT color=#3366cc>http://www.petrusrex.com/Programmes/jslib.htm</FONT></A> 这样的工具还远没有成熟)，也难于进行断点跟踪。excel方案倒是有完整的vba环境。</P>
<P>6, 客户端基础设施运行效率低。javascipt/vba都是解释语言，难于实现复杂逻辑，其性能决定只能用它们进行细粒度的界面控制。</P>
<P>7，由于浏览器的分裂，造成语言的不标准，应用程序难以跨平台使用。在IE平台上可以使用behavior和expression这种类AOP的操作，却无法在mozilla中实现。</P>
<P>jsf方案有望成为备选方案，但是按照myfaces目前的情况，要实现更多的表现层控件，才能完成更复杂灵活的控制。</P>
<P>下面一次<A href="http://dev.21tx.com/" target=_blank><FONT color=#3366cc>软件开发</FONT></A>方式的突破，向前看，可能出现设计方式的突破，MDA是方向；另一个方向就是向后对具体实现的突破，在类似webapp这样的具体技术（除了webapp,application同样面临类似问题）上，对于是否能够把model的定义直接带入到表现层，JSF和<A href="http://dev.21tx.com/dotnet/" target=_blank><FONT color=#3366cc>.net</FONT></A>可能会有新一轮竞争。<BR></P><img src ="http://www.blogjava.net/jelver/aggbug/33457.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">冰河快狼</a> 2006-03-03 13:59 <a href="http://www.blogjava.net/jelver/articles/33457.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate配置要点详谈</title><link>http://www.blogjava.net/jelver/articles/32831.html</link><dc:creator>冰河快狼</dc:creator><author>冰河快狼</author><pubDate>Tue, 28 Feb 2006 05:30:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/32831.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/32831.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/32831.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/32831.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/32831.html</trackback:ping><description><![CDATA[<P>1.两种配置文件：<BR>A.hibernate.cfg.xml和B.hibernate.properties<BR><BR>A中可含映射文件的配置，而B中hard codes加映射文件。<BR><BR>A.Configuration config=new Configuration().config();<BR>B. Configuration config=new Configuration();<BR>config.addClass(TUser.class);<BR><BR>2.你不必一定用hibernate.cfg.xml或hibernate.properties这两文件名，你也不一定非得把配置文件放在Classes下，　　File file=new File("c:\\sample\\myhibernate.xml");　　Configuration config=new Configuration().config(file);<BR><BR>3. session.Flush() 强制数据库立即同步，当用事务时，不必用flush,事务提交自动调用flush在session关闭时也会调用flush<BR><BR>4. Hibernate总是使用对象类型作为字段类型<BR><BR>5. XDoclet专门建立了hibernate doclet,就是在java代码上加上一些java docTag，后来再让XDoclet分析该java代码，生成映射文件;<BR><BR>6.HQL子句本身大小写无关，但是其中出现的类名和属性名必须注意大小写区分。<BR><BR>7.关系：　 Constrained : 约束，表明主控表的主键上是否存在一个外键（foreigh key）对其进行约束。<BR><BR>property-ref:关联类中用于与主控类相关联的属性名，默认为关联类的主键属性名<BR><BR>单向一对多需在一方配置，双向一对多需在双方进行配置<BR><BR>8.lazy=false:被动方的记录由hibernate负责记取，之后存放在主控方指定的Collection类型属性中<BR><BR>9. java.util.Set或net.sof.hibernate.collecton.Bag类型的Collection<BR><BR>10.重要：inverse:用于标识双向关联中的被动方一端。<BR><BR>inverse=false的一方（主控方）负责维护关联关系.默认值：false<BR><BR>11.batch-size:采用延迟加载特征时，一次读入的数据数昨。<BR><BR>12.一对多通过主控方更新（主控方为一方时）<BR><BR>user.getAddresses().add(addr);<BR><BR>session.save(user);//通过主控对象级联更新<BR><BR>13.在one-to-many 关系中，将many 一方设为主动方（inverse=false）将有助性能的改善。在一方设置关系时，inverse=true,即将主控权交给多方，　　这样多方可主动从一方获得foreign key,然后一次insert即可完工。<BR><BR>addr.setUser(user);//设置关联的TUser对象<BR><BR>user.getAddresses().add(addr);<BR><BR>session.save(user);//级联更新<BR><BR>14.只有设为主控方的一方才关心（访问）对方的属性，被动方是不关心对方的属性的。<BR><BR>15.one-to-many与many-to-one节点的配置属性不同：<BR><BR>一对多关系多了lazy和inverse两个属性多对多节点属性：<BR><BR>column:中间映射表中，关联目标表的关联字段<BR><BR>class:类名，关联目标类<BR><BR>outer-join:是否使用外联接<BR><BR>注意:access是设置属性值的读取方式。<BR><BR>column是设置关联字段。<BR><BR>16.多对多，注意两方都要设置inverse和lazy,cascade只能设为insert-update<BR><BR>多对多关系中，由于关联关系是两张表相互引用，因此在保存关系状态时必须对双方同时保存。<BR><BR>group1.getRoles().add(role1);　　role1.getGroups().add(group1);<BR><BR>session.save(role1);　　session.save(group1);<BR><BR>17.关于vo和po　　vo经过hibernate容量处理，就变成了po(该vo的引用将被容器保存，并且在session关闭时flush,因此po如果再传到其它地方改变了，就危险了)　　　 vo和po相互转换：BeanUtils.copyProperties(anotherUser,user);<BR><BR>18.对于save操作而言，如果对象已经与Session相关联（即已经被加入Session的实体容器中），则无需进行具体的操作。因为之后的Session.flush过程中，Hibernate 会对此实体容器中的对象进行遍历，查找出发生变化的实体，生成并执行相应的update 语句。<BR><BR>19.如果我们采用了延迟加载机制，但希望在一些情况下，实现非延迟加 载时的功能，也就是说，我们希望在Session关闭后，依然允许操作user的addresses 属性 Hibernate.initialize方法可以通过强制加载关联对象实现这一功能： 这也正是我们为什么在编写POJO时，必须用JDK Collection接口（如Set,Map）, 而非特定的JDK Collection实现类（如HashSet、HashMap）申明Collection属性的 原因。<BR><BR>20.事务：从sessionFactory获得session,其自动提交属性就已经关闭(AutoCommit=false),此时若执行了jdbc操作，如果不显式调用session.BeginTransaction(),是不会执行事务操作的。<BR><BR>jdbc transaction:基于同一个session(就是同一个connection)的事务;<BR><BR>jta　transaction:跨session（跨connection）事务.<BR><BR>对于jta事务，有三种实现方法：<BR><BR>A。UserTransaction tx=new InitialContext().lookup("...");<BR>tx.commit();<BR><BR>B. 使用hibernate封装的方法：(不推荐)<BR><BR>Transaction tx=session.beginTransaction();<BR>tx.commit();<BR>C. 使用ejb之sessionBean的事务技持方法，你只要在把需要在发布描述符中，把需要jta事务的方法声明为require即可<BR><BR>21.悲观锁，乐观锁：　　乐观锁一般通过version来实现，注意version节点必须出现在id后。<BR><BR>22.Hibernate中，可以通过Criteria.setFirstResult和Criteria.setFetchSize方法设定分页范围。<BR><BR>Query接口中也提供了与其一致的方法，hibernate主要在dialect类中实现在这个功能。<BR><BR>23.cache<BR><HIBERNATE-CONFIGURATION /><BR><SESSION-FACTORY />……<BR><property name="hibernate.cache.provider_class"><BR>net.sf.ehcache.hibernate.Provider　 </property><BR><BR>还需对ecache本身进配置<BR><EHCACHE /><DISKSTORE path="java.io.tmpdir" /><BR><DEFAULTCACHE maxelementsinmemory="10000" cache中最大允许保存的数据数量="" eternal="false" cache中数据是否为常量="" timetoidleseconds="120" 缓存数据钝化时间="" timetoliveseconds="120" 缓存数据的生存时间="" overflowtodisk="true" 内存不足时，是否启用磁盘缓存="" />　 </EHCACHE /><BR><BR>之后在映射文件中指定各个映射实体的cache策略<BR><CLASS name=" org.hibernate.sample.TUser" ....="" /><BR><CACHE usage="read-write" /><BR>Query.list()跟Query.iterate()的不同： 对于query.list()总是通过一条sql语句获取所有记录,然后将其读出，填入pojo返回; 但是query.iterate()，则是首先通过一条Select SQL 获取所有符合查询条件的记录的 id，再对这个id 集合进行循环操作，通过单独的Select SQL 取出每个id 所对应的记 录，之后填入POJO中返回。<BR><BR>也就是说，对于list 操作，需要一条SQL 完成。而对于iterate 操作，需要n+1 条SQL。，list方法将不会从Cache中读取数据。iterator却会。<BR><BR>24.ThreadLocal:它会为每个线程维护一个私有的变量空间。实际上， 其实现原理是在JVM 中维护一个Map，这个Map的key 就是当前的线程对象，而value则是 线程通过ThreadLocal.set方法保存的对象实例。当线程调用ThreadLocal.get方法时， ThreadLocal会根据当前线程对象的引用，取出Map中对应的对象返回。<BR><BR>这样，ThreadLocal通过以各个线程对象的引用作为区分，从而将不同线程的变量隔离开来。<BR><BR>25.Hibernate官方开发手册标准示例:<BR><BR>public class HibernateUtil { private static SessionFactory sessionFactory;<BR>static { try { // Create the SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();<BR>} catch (HibernateException ex) { throw new RuntimeException( "Configuration problem: " + ex.getMessage(), ex );<BR>} } public static final ThreadLocal session = new ThreadLocal();<BR>public static Session currentSession() throws HibernateException { Session s = (Session) session.get();<BR>// Open a new Session, if this Thread has none yet if (s == null) { s = sessionFactory.openSession();<BR>session.set(s);<BR>} return s;<BR>} public static void closeSession() throws HibernateException { Session s = (Session) session.get();<BR>session.set(null);<BR>if (s != null) s.close();<BR>} }<BR><BR>26.通过filter实现session的重用：<BR><BR>public class PersistenceFilter implements Filter { protected static ThreadLocal hibernateHolder = new ThreadLocal();<BR>public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { hibernateHolder.set(getSession());<BR>try { …… chain.doFilter(request, response);<BR>…… } finally { Session sess = (Session)hibernateHolder.get();<BR>if (sess != null) { hibernateHolder.set(null);<BR>try { sess.close(); } catch (HibernateException ex) { throw new ServletException(ex);<BR>} } } } ……}<BR><BR>27.Spring的参数化事务管理功能相当强大，笔者建议在基于Spring Framework的应用 开发中，尽量使用容器管理事务，以获得数据逻辑代码的最佳可读性。<BR><BR>public class UserDAO extends HibernateDaoSupport implements IUserDAO { public void insertUser(User user) { getHibernateTemplate().saveOrUpdate(user);<BR>} }<BR><BR>上面的UserDAO实现了自定义的IUserDAO接口，并扩展了抽象类：<BR><BR>HibernateDaoSupport HibernateSupport实现了HibernateTemplate和SessionFactory实例的关联。<BR><BR>HibernateTemplate对Hibernate Session操作进行了封装，而 HibernateTemplate.execute方法则是一封装机制的核心<BR><BR>*在spring的配置文件里，移植了整个hibernate.cfg.xml的内容。</P><img src ="http://www.blogjava.net/jelver/aggbug/32831.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">冰河快狼</a> 2006-02-28 13:30 <a href="http://www.blogjava.net/jelver/articles/32831.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate综合查询(查询结果从多张表中找出非常普遍，该例子教你实现查询结果bean的实现) （转）</title><link>http://www.blogjava.net/jelver/articles/32343.html</link><dc:creator>冰河快狼</dc:creator><author>冰河快狼</author><pubDate>Fri, 24 Feb 2006 13:01:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/32343.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/32343.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/32343.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/32343.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/32343.html</trackback:ping><description><![CDATA[<SPAN style="COLOR: #333399">
<P><SPAN style="COLOR: #333399">查询结果从多张表中找出非常普遍，该例子教你实现查询结果bean的实现<BR>1 插寻结果bean，A的属性a、b来源于已影射的bean M,N<BR>class A<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String a,b;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public A(String a,String b)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.a=a;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; thia.b=b;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>}</P>
<P>2 编写查询方法</P>
<P>&nbsp; Query q;<BR>&nbsp; List l = null;<BR>&nbsp; q = session.createQuery("select new A(M.a,N.b) from M as M,N as N where M.id=N.id");</P>
<P>3 资源载入A<BR>&lt;import class="package.A"/&gt;</P></SPAN></SPAN><img src ="http://www.blogjava.net/jelver/aggbug/32343.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">冰河快狼</a> 2006-02-24 21:01 <a href="http://www.blogjava.net/jelver/articles/32343.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>