﻿<?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-dnalncjm</title><link>http://www.blogjava.net/dnalncjm/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 07:54:37 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 07:54:37 GMT</pubDate><ttl>60</ttl><item><title>hibernate实体对象数据库生成（接）</title><link>http://www.blogjava.net/dnalncjm/archive/2007/04/22/112536.html</link><dc:creator>易天</dc:creator><author>易天</author><pubDate>Sat, 21 Apr 2007 18:32:00 GMT</pubDate><guid>http://www.blogjava.net/dnalncjm/archive/2007/04/22/112536.html</guid><wfw:comment>http://www.blogjava.net/dnalncjm/comments/112536.html</wfw:comment><comments>http://www.blogjava.net/dnalncjm/archive/2007/04/22/112536.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dnalncjm/comments/commentRss/112536.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dnalncjm/services/trackbacks/112536.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="font-size: 15pt; line-height: 150%; font-family: 黑体;" lang="EN-US">3</span><span style="font-size: 15pt; line-height: 150%; font-family: 黑体;">、<span lang="EN-US">Hibernate</span>的<span lang="EN-US">DAO</span>实现<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left; text-indent: 21pt; line-height: 15.7pt;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">DAO</span><span style="font-size: 12pt; font-family: 宋体;">对象是模块化的数据库访问组件，<span lang="EN-US">DAO</span>对象通常包括：对持久化类的基本<span lang="EN-US">CRUD</span>操作（插入、查询、更新、删除）操作。<span lang="EN-US">Spring</span>对<span lang="EN-US">Hibernate</span>的<span lang="EN-US">DAO</span>实现提供了良好的支持。主要有如下两种方式的<span lang="EN-US">DAO</span>实现：<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: wingdings;" lang="EN-US"></span><span style="font-size: 12pt; font-family: 宋体;">继承<span lang="EN-US">HibernateDaoSupport</span>的实现<span lang="EN-US">DAO<o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: wingdings;" lang="EN-US"></span><span style="font-size: 7pt;" lang="EN-US"> </span><span style="font-size: 12pt; font-family: 宋体;">基于<span lang="EN-US">Hibernate3.0</span>实现<span lang="EN-US">DAO<o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left; text-indent: 21pt; line-height: 15.7pt;" align="left"><span style="font-size: 12pt; font-family: 宋体;">不管采用哪一种实现，这种<span lang="EN-US">DAO</span>对象都极好地融合到<span lang="EN-US">Spring</span>的<span lang="EN-US">ApplicationContext</span>中，遵循依赖注入模式，提高解耦。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="font-size: 15pt; line-height: 150%; font-family: 黑体;">继承<span lang="EN-US">HibernateDaoSupport</span>实现<span lang="EN-US">DAO<o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left; text-indent: 21pt; line-height: 15.7pt;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Spring</span><span style="font-size: 12pt; font-family: 宋体;">为<span lang="EN-US">Hibernate</span>的<span lang="EN-US">DAO</span>提供工具类：<span lang="EN-US">HibernateDaoSupport</span>。该类主要提供如下两个方法，方便<span lang="EN-US">DAO</span>的实现：<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: wingdings;" lang="EN-US"></span><span style="font-size: 7pt;" lang="EN-US"> </span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">public final HibernateTemplate getHibernateTemplate()<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: wingdings;" lang="EN-US"></span><span style="font-size: 7pt;" lang="EN-US"> </span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">public final void setSessionFactory(SessionFactory&nbsp;sessionFactory)<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; text-indent: 21pt; line-height: 15.7pt;" align="left"><span style="font-size: 12pt; font-family: 宋体;">其中，<span lang="EN-US">setSessionFactory</span>方法用来接收<span lang="EN-US">Spring</span>的<span lang="EN-US">ApplicationContext</span>的依赖注入，可接收配置在<span lang="EN-US">Spring</span>的<span lang="EN-US">SessionFactory</span>实例，<span lang="EN-US">getHibernateTemplate</span>方法则用来根据刚才的<span lang="EN-US">SessionFactory</span>产生<span lang="EN-US">Session</span>，最后生成<span lang="EN-US">HibernateTemplate</span>来完成数据库访问。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><strong><span style="font-size: 13.5pt; font-family: 宋体;" lang="EN-US">HibernateTemplate</span></strong><strong><span style="font-size: 13.5pt; font-family: 黑体;">的常规用法</span></strong><strong><span style="font-size: 13.5pt; font-family: 宋体;" lang="EN-US"><o:p></o:p></span></strong></p>
<p class="MsoNormal" style="text-align: left; text-indent: 21pt; line-height: 15.7pt;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">HibernateTemplate</span><span style="font-size: 12pt; font-family: 宋体;">提供非常多的常用方法来完成基本的操作，比如通常的增加、删除、修改、查询等操作，<span lang="EN-US">Spring 2.0</span>更增加对命名<span lang="EN-US">SQL</span>查询的支持，也增加对分页的支持。大部分情况下，使用<span lang="EN-US">Hibernate</span>的常规用法，就可完成大多数<span lang="EN-US">DAO</span>对象的<span lang="EN-US">CRUD</span>操作。下面是<span lang="EN-US">HibernateTemplate</span>的常用方法简介：<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: wingdings;" lang="EN-US"></span><span style="font-size: 7pt;" lang="EN-US"> </span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">void delete(Object entity)</span><span style="font-size: 12pt; font-family: 宋体;">：删除指定持久化实例<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: wingdings;" lang="EN-US"></span><span style="font-size: 7pt;" lang="EN-US"> </span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">deleteAll(Collection entities)</span><span style="font-size: 12pt; font-family: 宋体;">：删除集合内全部持久化类实例<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: wingdings;" lang="EN-US"></span><span style="font-size: 7pt;" lang="EN-US"> </span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">find(String queryString)</span><span style="font-size: 12pt; font-family: 宋体;">：根据<span lang="EN-US">HQL</span>查询字符串来返回实例集合<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: wingdings;" lang="EN-US"></span><span style="font-size: 7pt;" lang="EN-US"> </span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">findByNamedQuery(String queryName)</span><span style="font-size: 12pt; font-family: 宋体;">：根据命名查询返回实例集合<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: wingdings;" lang="EN-US"></span><span style="font-size: 7pt;" lang="EN-US"></span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">get(Class entityClass, Serializable id)</span><span style="font-size: 12pt; font-family: 宋体;">：根据主键加载特定持久化类的实例<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: wingdings;" lang="EN-US"></span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">save(Object entity)</span><span style="font-size: 12pt; font-family: 宋体;">：保存新的实例<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: wingdings;" lang="EN-US"></span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">saveOrUpdate(Object entity)</span><span style="font-size: 12pt; font-family: 宋体;">：根据实例状态，选择保存或者更新<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: wingdings;" lang="EN-US"></span><span style="font-size: 7pt;" lang="EN-US"> </span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">update(Object entity)</span><span style="font-size: 12pt; font-family: 宋体;">：更新实例的状态，要求<span lang="EN-US">entity</span>是持久状态<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: wingdings;" lang="EN-US"></span><span style="font-size: 7pt;" lang="EN-US"></span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">setMaxResults(int maxResults)</span><span style="font-size: 12pt; font-family: 宋体;">：设置分页的大小<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><strong><span style="font-size: 13.5pt; font-family: 宋体;" lang="EN-US">Hibernate</span></strong><strong><span style="font-size: 13.5pt; font-family: 黑体;">的复杂用法</span></strong><strong><span style="font-size: 13.5pt; font-family: 宋体;" lang="EN-US">HibernateCallback<o:p></o:p></span></strong></p>
<p class="MsoNormal" style="text-align: left; text-indent: 21pt; line-height: 15.7pt;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">HibernateTemplate</span><span style="font-size: 12pt; font-family: 宋体;">还提供一种更加灵活的方式来操作数据库，通过这种方式可以完全使用<span lang="EN-US">Hibernate</span>的操作方式。<span lang="EN-US">HibernateTemplate</span>的灵活访问方式是通过如下两个方法完成：<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: wingdings;" lang="EN-US"></span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Object execute(HibernateCallback action)<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: wingdings;" lang="EN-US"></span><span style="font-size: 7pt;" lang="EN-US"></span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">List execute(HibernateCallback action)<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left; text-indent: 21pt; line-height: 15.7pt;" align="left"><span style="font-size: 12pt; font-family: 宋体;">这两个方法都需要一个<span lang="EN-US">HibernateCallback</span>的实例，<span lang="EN-US">HibernateCallback</span>实例可在任何有效的<span lang="EN-US">Hibernate</span>数据访问中使用。程序开发者通过<span lang="EN-US">HibernateCallback</span>，可以完全使用<span lang="EN-US">Hibernate</span>灵活的方式来访问数据库，解决<span lang="EN-US">Spring</span>封装<span lang="EN-US">Hibernate</span>后灵活性不足的缺陷。<span lang="EN-US">HibernateCallback</span>是一个接口，该接口只有一个方法<span lang="EN-US">doInHibernate(org.hibernate.Session&nbsp;session)</span>，该方法只有一个参数<span lang="EN-US">Session</span>。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left; text-indent: 21pt; line-height: 15.7pt;" align="left"><span style="font-size: 12pt; font-family: 宋体;">通常，程序中采用实现<span lang="EN-US">HibernateCallback</span>的匿名内部类来获取<span lang="EN-US">HibernateCallback</span>的实例，方法<span lang="EN-US">doInHibernate</span>的方法体就是<span lang="EN-US">Spring</span>执行的持久化操作<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left; text-indent: 21pt; line-height: 15.7pt;" align="left"><span style="font-size: 12pt; font-family: 宋体;">注意：方法<span lang="EN-US">doInHibernate</span>方法内可以访问<span lang="EN-US">Session</span>，该<span lang="EN-US">Session</span>对象是绑定到该线程的<span lang="EN-US">Session</span>实例。该方法内的持久层操作，与不使用<span lang="EN-US">Spring</span>时的持久层操作完全相同。这保证对于复杂的持久层访问，依然可以使用<span lang="EN-US">Hibernate</span>的访问方式。</span></p>
<p class="MsoNormal" style="text-align: left; text-indent: 21pt; line-height: 15.7pt;" align="left">下面，让我们看一下接 CRUD的一些方法的实现吧：</p>
<br>
<p class="MsoNormal" style="text-align: left; text-indent: 21pt; line-height: 15.7pt;" align="left">
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.io.Serializable;<br></span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.sql.SQLException;<br></span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.util.Collection;<br></span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.util.Iterator;<br></span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.util.List;<br></span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.util.Map;<br><br></span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.commons.collections.MapUtils;<br></span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.commons.lang.StringUtils;<br></span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.hibernate.Criteria;<br></span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.hibernate.HibernateException;<br></span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.hibernate.Session;<br></span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.hibernate.criterion.Order;<br></span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.hibernate.criterion.Restrictions;<br></span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.springframework.orm.ObjectRetrievalFailureException;<br></span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.springframework.orm.hibernate3.HibernateCallback;<br></span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.springframework.orm.hibernate3.support.HibernateDaoSupport;<br><br></span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;test.dao.Dao;<br><br></span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;DaoImpl&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;Dao{<br><br>&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;List&nbsp;findAllBy(</span><span style="color: #0000ff;">final</span><span style="color: #000000;">&nbsp;Class&nbsp;clazz,&nbsp;</span><span style="color: #0000ff;">final</span><span style="color: #000000;">&nbsp;String&nbsp;name,&nbsp;</span><span style="color: #0000ff;">final</span><span style="color: #000000;">&nbsp;Object&nbsp;value)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;实现根据属性名和属性值查询对象，返回唯一对象</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;getHibernateTemplate().executeFind(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;HibernateCallback(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;Object&nbsp;doInHibernate(Session&nbsp;session)&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;HibernateException,SQLException{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Criteria&nbsp;criteria</span><span style="color: #000000;">=</span><span style="color: #000000;">session.createCriteria(clazz);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria.add(Restrictions.eq(name,&nbsp;value));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria.setCacheable(</span><span style="color: #0000ff;">true</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;criteria.list();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;});<br>&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;List&nbsp;findAllBy(</span><span style="color: #0000ff;">final</span><span style="color: #000000;">&nbsp;Class&nbsp;clazz,&nbsp;</span><span style="color: #0000ff;">final</span><span style="color: #000000;">&nbsp;Map&nbsp;filter,</span><span style="color: #0000ff;">final</span><span style="color: #000000;">&nbsp;Map&nbsp;sorMap,</span><span style="color: #0000ff;">final</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;pageNo,</span><span style="color: #0000ff;">final</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;pageSize)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;实现返回&nbsp;根据Map中过滤条件和分页参数查询</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;getHibernateTemplate().executeFind(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;HibernateCallback(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;Object&nbsp;doInHibernate(Session&nbsp;session)&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;HibernateException,SQLException{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Criteria&nbsp;criteria</span><span style="color: #000000;">=</span><span style="color: #000000;">session.createCriteria(clazz);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filterCriteria(criteria,&nbsp;filter);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sortCriteria(criteria,sorMap);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(pageNo&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;">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria.setFirstResult(pageNo&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">?</span><span style="color: #000000;">&nbsp;(pageNo&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;pageSize<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria.setMaxResults(pageSize);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria.setCacheable(</span><span style="color: #0000ff;">true</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;criteria.list();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;});<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br>&nbsp;&nbsp;&nbsp;*&nbsp;构造criteria的过滤条件的回调函数<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;</span><span style="color: #0000ff;">protected</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;filterCriteria(Criteria&nbsp;criteria,&nbsp;Map&nbsp;filter)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(MapUtils.isNotEmpty(filter))&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(Iterator&nbsp;iterator&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;filter.keySet().iterator();&nbsp;iterator.hasNext();)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;fieldName&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(String)&nbsp;iterator.next();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria.add(Restrictions.eq(fieldName,&nbsp;filter.get(fieldName)));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br>&nbsp;&nbsp;&nbsp;*&nbsp;构造Criteria的排序条件.<br>&nbsp;&nbsp;&nbsp;*<br>&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080;">@param</span><span style="color: #008000;">&nbsp;sortMap&nbsp;&nbsp;排序条件.<br>&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080;">@param</span><span style="color: #008000;">&nbsp;criteria&nbsp;Criteria实例.<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;</span><span style="color: #0000ff;">protected</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;sortCriteria(Criteria&nbsp;criteria,&nbsp;Map&nbsp;sortMap)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(MapUtils.isNotEmpty(sortMap))&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(Iterator&nbsp;iterator&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;sortMap.keySet().iterator();&nbsp;iterator.hasNext();)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;fieldName&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(String)&nbsp;iterator.next();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;orderType&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(String)&nbsp;sortMap.get(fieldName);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria.addOrder(StringUtils.equalsIgnoreCase(</span><span style="color: #000000;">"</span><span style="color: #000000;">asc</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;orderType)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">?</span><span style="color: #000000;">&nbsp;Order.asc(fieldName)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;Order.desc(fieldName));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;Object&nbsp;findBy(</span><span style="color: #0000ff;">final</span><span style="color: #000000;">&nbsp;Class&nbsp;clazz,&nbsp;</span><span style="color: #0000ff;">final</span><span style="color: #000000;">&nbsp;String&nbsp;name,&nbsp;</span><span style="color: #0000ff;">final</span><span style="color: #000000;">&nbsp;Object&nbsp;value)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;实现根据对象属性名和属性值，返回唯一对象</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;getHibernateTemplate().execute(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;HibernateCallback(){<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;Object&nbsp;doInHibernate(Session&nbsp;session)&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;HibernateException,&nbsp;SQLException&nbsp;{<br>&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</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Criteria&nbsp;criteria</span><span style="color: #000000;">=</span><span style="color: #000000;">session.createCriteria(clazz);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria.add(Restrictions.eq(name,value));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;list</span><span style="color: #000000;">=</span><span style="color: #000000;">criteria.list();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;list</span><span style="color: #000000;">==</span><span style="color: #0000ff;">null</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">list.isEmpty()</span><span style="color: #000000;">?</span><span style="color: #0000ff;">null</span><span style="color: #000000;">:list.iterator().next();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;});<br>&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;Object&nbsp;getObject(Class&nbsp;clazz,&nbsp;Serializable&nbsp;id)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;实现返回与此类对应主键为id的所有值</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;o</span><span style="color: #000000;">=</span><span style="color: #000000;">getHibernateTemplate().get(clazz,&nbsp;id);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(o</span><span style="color: #000000;">==</span><span style="color: #0000ff;">null</span><span style="color: #000000;">){<br>&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;ObjectRetrievalFailureException(clazz,id);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;o;<br>&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;List&nbsp;getObjects(Class&nbsp;clazz)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;实现返回entity类型值</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;getHibernateTemplate().loadAll(clazz);<br>&nbsp;&nbsp;}<br><br>&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;removeObject(Class&nbsp;clazz,&nbsp;Serializable&nbsp;id)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;实现根据数据库中与此类对应表的主键（id）删除此对象</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;getHibernateTemplate().delete(getObject(clazz,id));<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;}<br><br>&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;removeObject(Object&nbsp;o)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;实现删除对象</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;getHibernateTemplate().delete(o);<br>&nbsp;&nbsp;}<br><br>&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;removeObjects(Collection&nbsp;objects)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;getHibernateTemplate().deleteAll(objects);<br>&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;Serializable&nbsp;saveObject(Object&nbsp;o)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;实现序列化保存对象</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;getHibernateTemplate().save(o);<br>&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;total(Class&nbsp;clazz,&nbsp;Map&nbsp;filter)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;}<br><br>&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;updateObject(Object&nbsp;o)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;实现更新对象</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;getHibernateTemplate().update(o);<br>&nbsp;&nbsp;}<br><br>}<br></span></div>
</p>
<p class="MsoNormal" style="text-align: left; text-indent: 21pt; line-height: 15.7pt;" align="left">然后，我们要配置.xml</p>
<p class="MsoNormal" style="text-align: left; text-indent: 21pt; line-height: 15.7pt;" align="left">
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">&lt;?</span><span style="color: #000000;">xml&nbsp;version</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">1.0</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;encoding</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">UTF-8</span><span style="color: #000000;">"</span><span style="color: #000000;">?&gt;</span><span style="color: #000000;"><br></span><span style="color: #000000;">&lt;!</span><span style="color: #000000;">DOCTYPE&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;beans<br>&nbsp;&nbsp;&nbsp;&nbsp;PUBLIC&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">-//SPRING//DTD&nbsp;BEAN&nbsp;2.0//EN</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">http://www.springframework.org/dtd/spring-beans-2.0.dtd</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;">beans</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">bean<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">Dao</span><span style="color: #000000;">"</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">test.dao.hibernate.DaoImpl</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">property<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">sessionFactory</span><span style="color: #000000;">"</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ref</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">sessionFactory</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">bean</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">beans</span><span style="color: #000000;">&gt;</span></div>
<br><span style="font-size: 12pt; font-family: 宋体;"><span lang="EN-US"><o:p></o:p></span></span></p><img src ="http://www.blogjava.net/dnalncjm/aggbug/112536.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dnalncjm/" target="_blank">易天</a> 2007-04-22 02:32 <a href="http://www.blogjava.net/dnalncjm/archive/2007/04/22/112536.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate实体对象数据库生成</title><link>http://www.blogjava.net/dnalncjm/archive/2007/04/22/112535.html</link><dc:creator>易天</dc:creator><author>易天</author><pubDate>Sat, 21 Apr 2007 18:27:00 GMT</pubDate><guid>http://www.blogjava.net/dnalncjm/archive/2007/04/22/112535.html</guid><wfw:comment>http://www.blogjava.net/dnalncjm/comments/112535.html</wfw:comment><comments>http://www.blogjava.net/dnalncjm/archive/2007/04/22/112535.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dnalncjm/comments/commentRss/112535.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dnalncjm/services/trackbacks/112535.html</trackback:ping><description><![CDATA[<p class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">首先，我们先要理解一下</span><span style="font-size: 12pt;" lang="EN-US">相关知识点：</span></p>
<p class="MsoNormal">
</p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;">
</p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="font-size: 15pt; line-height: 150%; font-family: 黑体;" lang="EN-US">1</span><span style="font-size: 15pt; line-height: 150%; font-family: 黑体;">、对象的序列化：<span lang="EN-US">Serializable<o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体;">对象序列化是对象永久化的一种机制，可以把序列化当成一种深度克隆的方法，确切的说应该是对象的序列化，一般程序在运行时，产生对象，这些对象随着程序的停止运行而消失，但如果我们想把某些对象（因为是对象，所以有各自不同的特性）保存下来，在程序终止运行后，这些对象仍然存在，可以在程序再次运行时读取这些对象的值，或者在其他程序中利用这些保存下来的对象。这种情况下就要用到对象的序列化。一般对象序列化后会保存在存储设备（硬盘）上，以文件的形式出现。</span><span style="font-size: 12pt; line-height: 150%;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="font-size: 15pt; line-height: 150%; font-family: 黑体;" lang="EN-US">2</span><span style="font-size: 15pt; line-height: 150%; font-family: 黑体;">、<span lang="EN-US">CRUD<o:p></o:p></span></span></p>
<p class="MsoNormal" style="line-height: 150%;"><span style="font-size: 12pt; line-height: 150%;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>CRUD</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体;">是增加、读取、更新和删除几个单词的首字母简写</span><span style="font-size: 12pt; line-height: 150%;" lang="EN-US">&nbsp;</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体;">即</span><span style="font-size: 12pt; line-height: 150%;" lang="EN-US">Create,Read,Update,Delete</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体;">四个单词的缩写，主要被用在描述软件系统中数据库或者持久层的基本操作功能。</span><br><span style="font-size: 12pt; line-height: 150%; color: #ff6600;" lang="EN-US">(In computing, CRUD is an acronym for
create, retrieve, update, and delete. It is used to refer to the basic
functions of a database or persistence layer in a software system.)<o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="font-size: 12pt; line-height: 150%;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">在进行</span><span lang="EN-US">Hibernate</span><span style="font-family: 宋体;">开发过程中，我们通常会使用</span><span lang="EN-US">DAO</span><span style="font-family: 宋体;">模式，有一些通用的数据操作方法，如</span><span lang="EN-US">CRUD</span><span style="font-family: 宋体;">，我们通常会将这些方法集中在一个</span><span lang="EN-US">DAO</span><span style="font-family: 宋体;">，这样会简便很多。DAO数据访问接口如下：</span></p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><br><span style="font-family: 宋体;">
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.io.Serializable;<br></span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.util.Collection;<br></span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.util.List;<br></span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.util.Map;<br><br></span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">interface</span><span style="color: #000000;">&nbsp;Dao&nbsp;{<br><br>&nbsp;&nbsp;List&nbsp;getObjects(Class&nbsp;clazz);</span><span style="color: #008000;">//</span><span style="color: #008000;">返回数据库中与此类对应的表的所有值，即entity类型中的所有信息</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>&nbsp;&nbsp;Object&nbsp;getObject(Class&nbsp;clazz,&nbsp;Serializable&nbsp;id);</span><span style="color: #008000;">//</span><span style="color: #008000;">返回与此类对应的表主键为id的所有值</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>&nbsp;&nbsp;Serializable&nbsp;saveObject(Object&nbsp;o);</span><span style="color: #008000;">//</span><span style="color: #008000;">序列化保存对象。</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>&nbsp;&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;updateObject(Object&nbsp;o);</span><span style="color: #008000;">//</span><span style="color: #008000;">更新此对象</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>&nbsp;&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;removeObject(Class&nbsp;clazz,&nbsp;Serializable&nbsp;id);</span><span style="color: #008000;">//</span><span style="color: #008000;">根据数据库中与此类对应表的主键（id）删除此对象</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>&nbsp;&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;removeObject(Object&nbsp;o);</span><span style="color: #008000;">//</span><span style="color: #008000;">删除此对象</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>&nbsp;&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;removeObjects(Collection&nbsp;objects);<br><br>&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;"><br>&nbsp;&nbsp;&nbsp;*&nbsp;根据属性名和属性值查询对象，返回唯一对象<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;Object&nbsp;findBy(Class&nbsp;clazz,&nbsp;String&nbsp;name,&nbsp;Object&nbsp;value);<br><br>&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;"><br>&nbsp;&nbsp;&nbsp;*&nbsp;根据属性名和属性值查询对象，返回所以符合条件的对象<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;List&nbsp;findAllBy(Class&nbsp;clazz,&nbsp;String&nbsp;name,&nbsp;Object&nbsp;value);<br><br>&nbsp;&nbsp;</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br>&nbsp;&nbsp;&nbsp;*&nbsp;根据Map中过滤条件和分页参数查询.<br>&nbsp;&nbsp;&nbsp;*<br>&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080;">@param</span><span style="color: #008000;">&nbsp;filter&nbsp;&nbsp;&nbsp;过滤条件.<br>&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080;">@param</span><span style="color: #008000;">&nbsp;sortMap&nbsp;&nbsp;排序条件.<br>&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080;">@param</span><span style="color: #008000;">&nbsp;pageNo&nbsp;&nbsp;&nbsp;当前页码<br>&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080;">@param</span><span style="color: #008000;">&nbsp;pageSize&nbsp;每页显示记录数.<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br><br>&nbsp;&nbsp;List&nbsp;findAllBy(Class&nbsp;clazz,&nbsp;Map&nbsp;filter,&nbsp;Map&nbsp;sorMap,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;pageNo,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;pageSize);<br><br>&nbsp;&nbsp;</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br>&nbsp;&nbsp;&nbsp;*&nbsp;符合filter过滤条件的记录总数<br>&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080;">@param</span><span style="color: #008000;">&nbsp;clazz<br>&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080;">@param</span><span style="color: #008000;">&nbsp;filter<br>&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080;">@return</span><span style="color: #008000;"><br>&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;total(Class&nbsp;clazz,&nbsp;Map&nbsp;filter);<br>}</span></div>
</span></p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="font-family: 宋体;"><br></span></p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="font-size: 15pt; line-height: 150%; font-family: 黑体;"><span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal"><br><span style="font-size: 12pt;" lang="EN-US"></span><span style="font-size: 12pt; font-family: 宋体;"></span><span style="font-size: 12pt;" lang="EN-US"><o:p></o:p></span></p><img src ="http://www.blogjava.net/dnalncjm/aggbug/112535.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dnalncjm/" target="_blank">易天</a> 2007-04-22 02:27 <a href="http://www.blogjava.net/dnalncjm/archive/2007/04/22/112535.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>