﻿<?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-初春的温暖-随笔分类-SSH</title><link>http://www.blogjava.net/lonleung/category/45211.html</link><description>             慵懒而柔软</description><language>zh-cn</language><lastBuildDate>Fri, 04 Jun 2010 04:01:23 GMT</lastBuildDate><pubDate>Fri, 04 Jun 2010 04:01:23 GMT</pubDate><ttl>60</ttl><item><title>Hibernate DAO中的几个方法</title><link>http://www.blogjava.net/lonleung/archive/2010/06/04/322713.html</link><dc:creator>凉晾</dc:creator><author>凉晾</author><pubDate>Fri, 04 Jun 2010 03:53:00 GMT</pubDate><guid>http://www.blogjava.net/lonleung/archive/2010/06/04/322713.html</guid><wfw:comment>http://www.blogjava.net/lonleung/comments/322713.html</wfw:comment><comments>http://www.blogjava.net/lonleung/archive/2010/06/04/322713.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lonleung/comments/commentRss/322713.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lonleung/services/trackbacks/322713.html</trackback:ping><description><![CDATA[<span id="_498_731_Open_Text"><span style="color: #008000">
<p><font color="#000000">*&nbsp;save()方法提供了向数据库中添加数据的功能,但只能添加,这个DAO没有生成Update()的方法<br />
*&nbsp;但你可以简单的八save()方法改称具有Update功能:将getSession().save&nbsp;*&nbsp;(transientInstance);这句改成<br />
*&nbsp;getSession().merge(transientInstance);或者getSession().saveOrUpdate<br />
*&nbsp;&nbsp;(transientInstance);&nbsp; </font></p>
<p><font color="#000000">public void save(User transientInstance) {<br />
&nbsp;&nbsp;log.debug("saving User instance");<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;Session session=getSession();<br />
&nbsp;&nbsp;&nbsp;Transaction tx=session.beginTransaction();<br />
&nbsp;&nbsp;&nbsp;session.save(transientInstance);<br />
&nbsp;&nbsp;&nbsp;tx.commit();<br />
&nbsp;&nbsp;&nbsp;session.close();<br />
&nbsp;&nbsp;&nbsp;log.debug("save successful");<br />
&nbsp;&nbsp;} catch (RuntimeException re) {<br />
&nbsp;&nbsp;&nbsp;log.error("save failed", re);<br />
&nbsp;&nbsp;&nbsp;throw re;<br />
&nbsp;&nbsp;}<br />
&nbsp;}</font></p>
<p></span></span><span style="color: #000000"></p>
<p><span style="color: #000000"><br />
<font color="#000000">delete()方法用来删除的 实际上我们会用下边的这个方法进行删除</font></span></p>
<p><span style="color: #000000"><font color="#000000">public void delete(Integer id){<br />
&nbsp;&nbsp;log.debug("deleting User instance&#8230;");<br />
&nbsp;&nbsp;User user=findById(id);<br />
&nbsp;&nbsp;delete(user);<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;public void delete(User persistentInstance) {<br />
&nbsp;&nbsp;log.debug("deleting User instance");<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;Session session=getSession();<br />
&nbsp;&nbsp;&nbsp;Transaction tx=session.beginTransaction();<br />
&nbsp;&nbsp;&nbsp;session.delete(persistentInstance);<br />
&nbsp;&nbsp;&nbsp;tx.commit();<br />
&nbsp;&nbsp;&nbsp;session.close();<br />
&nbsp;&nbsp;&nbsp;log.debug("delete successful");<br />
&nbsp;&nbsp;} catch (RuntimeException re) {<br />
&nbsp;&nbsp;&nbsp;log.error("delete failed", re);<br />
&nbsp;&nbsp;&nbsp;throw re;<br />
&nbsp;&nbsp;}<br />
&nbsp;}</font></span></p>
<p><span style="color: #000000"><font color="#000000">根据编号进行查找</font></span></p>
<p><span style="color: #000000"><font color="#000000">&nbsp;public User findById(java.lang.Integer id) {<br />
&nbsp;&nbsp;log.debug("getting User instance with id: " + id);<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;User instance = (User) getSession().get("hbm.User", id);<br />
&nbsp;&nbsp;&nbsp;return instance;<br />
&nbsp;&nbsp;} catch (RuntimeException re) {<br />
&nbsp;&nbsp;&nbsp;log.error("get failed", re);<br />
&nbsp;&nbsp;&nbsp;throw re;<br />
&nbsp;&nbsp;}<br />
&nbsp;}</font></span></p>
<p><span style="color: #000000"><font color="#000000">findByExample()方法实现的功能相当于"select&nbsp;*&nbsp;from&nbsp;Usertable"实现的功能就是查询所有&nbsp;数据.<br />
</font></span></p>
<p><span style="color: #000000"><font color="#000000">&nbsp;public List findByExample(User instance) {<br />
&nbsp;&nbsp;log.debug("finding User instance by example");<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;List results = getSession().createCriteria("hbm.User").add(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Example.create(instance)).list();<br />
&nbsp;&nbsp;&nbsp;log.debug("find by example successful, result size: "<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ results.size());<br />
&nbsp;&nbsp;&nbsp;return results;<br />
&nbsp;&nbsp;} catch (RuntimeException re) {<br />
&nbsp;&nbsp;&nbsp;log.error("find by example failed", re);<br />
&nbsp;&nbsp;&nbsp;throw re;<br />
&nbsp;&nbsp;}<br />
&nbsp;}</font></span></p>
<p><span style="color: #000000"><font color="#000000">findByProperty()方法用来灵活的提供一种按条件查询的方法,你可以自己定义要按什么样的方&nbsp;式查询.<br />
</font></span></p>
<p><span style="color: #000000"><font color="#000000">&nbsp;public List findByProperty(String propertyName, Object value) {<br />
&nbsp;&nbsp;log.debug("finding User instance with property: " + propertyName<br />
&nbsp;&nbsp;&nbsp;&nbsp;+ ", value: " + value);<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;String queryString = "from User as model where model."<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ propertyName + "= ?";<br />
&nbsp;&nbsp;&nbsp;Query queryObject = getSession().createQuery(queryString);<br />
&nbsp;&nbsp;&nbsp;queryObject.setParameter(0, value);<br />
&nbsp;&nbsp;&nbsp;return queryObject.list();<br />
&nbsp;&nbsp;} catch (RuntimeException re) {<br />
&nbsp;&nbsp;&nbsp;log.error("find by property name failed", re);<br />
&nbsp;&nbsp;&nbsp;throw re;<br />
&nbsp;&nbsp;}<br />
&nbsp;}</font></span></p>
<p><span style="color: #000000"><font color="#000000"></font></span></p>
<p><span style="color: #000000"><font color="#000000">&nbsp;public List findByName(Object name) {<br />
&nbsp;&nbsp;return findByProperty(NAME, name);<br />
&nbsp;}</font></span></p>
<p><span style="color: #000000"><font color="#000000">&nbsp;public List findBySex(Object sex) {<br />
&nbsp;&nbsp;return findByProperty(SEX, sex);<br />
&nbsp;}</font></span></p>
<p><span style="color: #000000"><font color="#000000">&nbsp;public List findByAge(Object age) {<br />
&nbsp;&nbsp;return findByProperty(AGE, age);<br />
&nbsp;}</font></span></p>
<p><span style="color: #000000"><font color="#000000">&nbsp;public List findAll() {<br />
&nbsp;&nbsp;log.debug("finding all User instances");<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;String queryString = "from User";<br />
&nbsp;&nbsp;&nbsp;Query queryObject = getSession().createQuery(queryString);<br />
&nbsp;&nbsp;&nbsp;return queryObject.list();<br />
&nbsp;&nbsp;} catch (RuntimeException re) {<br />
&nbsp;&nbsp;&nbsp;log.error("find all failed", re);<br />
&nbsp;&nbsp;&nbsp;throw re;<br />
&nbsp;&nbsp;}<br />
&nbsp;}</font></span></p>
<p><span style="color: #000000"><span style="color: #000000"><font color="#000000">将传入的detached状态的对象的属性复制到持久化对象中，并返回该持久化对象&nbsp;&nbsp;如果该session中没有关联的持久化对象，加载一个，如果传入对象未保存，保存一个副本并作为持久对象返回，传入对象依然保持detached状态。&nbsp;</font></span></span></p>
<p><span style="color: #000000"><span style="color: #000000"><font color="#000000">可以用作更新数据<br />
</font></span></span></p>
<p><span style="color: #000000"><font color="#000000">&nbsp;public User merge(User detachedInstance) {<br />
&nbsp;&nbsp;log.debug("merging User instance");<br />
&nbsp;&nbsp;try {</font></span></p>
<p><span style="color: #000000"><font color="#000000">&nbsp;&nbsp;&nbsp; Session session=getSession();<br />
&nbsp;&nbsp;&nbsp;Transaction tx=session.beginTransaction();<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;User result = (User) session.merge(detachedInstance);<br />
&nbsp;&nbsp;&nbsp;tx.commit();<br />
&nbsp;&nbsp;&nbsp;session.close();<br />
&nbsp;&nbsp;&nbsp;log.debug("merge successful");<br />
&nbsp;&nbsp;&nbsp;return result;<br />
&nbsp;&nbsp;} catch (RuntimeException re) {<br />
&nbsp;&nbsp;&nbsp;log.error("merge failed", re);<br />
&nbsp;&nbsp;&nbsp;throw re;<br />
&nbsp;&nbsp;}<br />
&nbsp;}</font></span></p>
<p><span style="color: #000000"><font color="#000000">将传入的对象持久化并保存。&nbsp;如果对象未保存（Transient状态），调用save方法保存。如果对象已保存（Detached状态），调用update方法将对象与Session重新关联。</font></span></p>
<p><span style="color: #000000"><font color="#000000">&nbsp;public void attachDirty(User instance) {<br />
&nbsp;&nbsp;log.debug("attaching dirty User instance");<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;getSession().saveOrUpdate(instance);<br />
&nbsp;&nbsp;&nbsp;log.debug("attach successful");<br />
&nbsp;&nbsp;} catch (RuntimeException re) {<br />
&nbsp;&nbsp;&nbsp;log.error("attach failed", re);<br />
&nbsp;&nbsp;&nbsp;throw re;<br />
&nbsp;&nbsp;}<br />
&nbsp;}</font></span></p>
<p><span style="color: #000000"><font color="#000000">将传入的对象状态设置为Transient状态&nbsp;<br />
</font></span></p>
<p><span style="color: #000000"><font color="#000000">&nbsp;public void attachClean(User instance) {<br />
&nbsp;&nbsp;log.debug("attaching clean User instance");<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;getSession().lock(instance, LockMode.NONE);<br />
&nbsp;&nbsp;&nbsp;log.debug("attach successful");<br />
&nbsp;&nbsp;} catch (RuntimeException re) {<br />
&nbsp;&nbsp;&nbsp;log.error("attach failed", re);<br />
&nbsp;&nbsp;&nbsp;throw re;<br />
&nbsp;&nbsp;}<br />
&nbsp;}</font></span></p>
</span>
<img src ="http://www.blogjava.net/lonleung/aggbug/322713.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lonleung/" target="_blank">凉晾</a> 2010-06-04 11:53 <a href="http://www.blogjava.net/lonleung/archive/2010/06/04/322713.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>