<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>rain16881</title>
    <description></description>
    <link>http://rain16881.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>hibernate高级查询N表多对多问题</title>
        <author>rain16881</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://rain16881.javaeye.com">rain16881</a>&nbsp;
          链接：<a href="http://rain16881.javaeye.com/blog/188044" style="color:red;">http://rain16881.javaeye.com/blog/188044</a>&nbsp;
          发表时间: 2008年04月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          有一用户表.<br />user :id , userName , password...... <br />有一分组表.<br />role: id , roleName, ....<br />有一功能表.<br />function: id, functionName.. ..<br /><br />他们是多对多关系.<br />有两个表做外键<br />表一<br />userrelationrole: userid, roleid 放用户权限的多对多映射<br /><br />表二<br />permission : roleid,functionid 用于放权限和功能的多对多映射<br /><br />在hibernate 中是用set,bag来做双向的多对多的..事关..list是不可以做双向的<br /><br />hibernate代码片段:<br />&lt;set name="users" table="userrelationrole" lazy="false" inverse="true" cascade="save-update" order-by="userId asc"><br />            &lt;cache usage="read-write"/><br />            &lt;key column="roleId" /><br />            &lt;many-to-many class="org.ylcompany.rain.hibernate.User" column="userId" outer-join="auto" /><br />        &lt;/set><br /><br />        &lt;set name="functions" table="permission" lazy="false"  cascade="save-update" order-by="functionId"><br />        	&lt;cache usage="read-write"/><br />            &lt;key column="roleId" /><br />            &lt;many-to-many class="org.ylcompany.rain.hibernate.Function" column="functionId" /><br />        &lt;/set><br />hibernate代码片段<br />这个是role中的hibernate片段<br />假如当我和道一个userid的时候,我要得到这个用户的功能的时候,<br />就要<br />User user = (User)basedao.loadByKey(org.ylcompany.rain.hibernate.User.class,"userName",this.userName);<br />		Set _roles = user.getRoles();<br />		Iterator _it = _roles.iterator();<br />		while(_it.hasNext() ){<br />			Role role = (Role)_it.next();<br />			Set _functions = role.getFunctions();<br />			Function _function = new Function();<br />			Iterator __it = _functions.iterator();<br />			while(__it.hasNext() ){}}<br />要这样子去迭代..<br />都要这样子麻烦的去查找功能的吗..这个就是在hibernate中的级联查询吗?<br /><br />有没方法,当知道userid时,当得到全部的function对象呢.?<br /><br />还有就是.在hibernate中..的高级查询.用Restrictions来做日期的范围查询是可以..<br /><br />有没方法直接去得到某月的记录呢..<br /><br />这个当然我的记录中是有记录的日期时间的.<br /><br />我对hibernate的高级查询,N表多表多关联不是太懂..请网友们帮手..回复一下.
          <br/>
          <span style="color:red;">
            <a href="http://rain16881.javaeye.com/blog/188044#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 29 Apr 2008 14:30:39 +0800</pubDate>
        <link>http://rain16881.javaeye.com/blog/188044</link>
        <guid>http://rain16881.javaeye.com/blog/188044</guid>
      </item>
      <item>
        <title>答复: 关于unsaved-value 的再问。</title>
        <author>rain16881</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://rain16881.javaeye.com">rain16881</a>&nbsp;
          链接：<a href="http://rain16881.javaeye.com/blog/164076" style="color:red;">http://rain16881.javaeye.com/blog/164076</a>&nbsp;
          发表时间: 2008年02月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          当你显式的使用session.save()或者session.update()操作一个对象的时候，实际上是用不到unsaved-value的。某些情况下(父子表关联保存)，当你在程序中并没有显式的使用save或者update一个持久对象，那么Hibernate需要判断被操作的对象究竟是一个已经持久化过的持久对象，是一个尚未被持久化过的内存临时对象。例如：<br /><br />[code:1]Session session = ...;<br />Transaction tx = ...;<br /><br />Parent parent = &#40;Parent&#41; session.load&#40;Parent.class, id&#41;;<br /><br />Child child = new Child&#40;&#41;;<br />child.setParent&#40;parent&#41;;<br />child.setName&#40;&quot;sun&quot;&#41;;<br /><br />parent.addChild&#40;child&#41;;<br />s.update&#40;parent&#41;;<br /><br />s.flush&#40;&#41;;<br />tx.commit&#40;&#41;;<br />s.close&#40;&#41;;[/code:1]<br /><br />在上例中，程序并没有显式的session.save(child); 那么Hibernate需要知道child究竟是一个临时对象，还是已经在数据库中有的持久对象。如果child是一个新创建的临时对象(本例中就是这种情况)，那么Hibernate应该自动产生session.save(child)这样的操作，如果child是已经在数据库中有的持久对象，那么Hibernate应该自动产生session.update(child)这样的操作。<br /><br />因此我们需要暗示一下Hibernate，究竟child对象应该对它自动save还是update。在上例中，显然我们应该暗示Hibernate对child自动save，而不是自动update。那么Hibernate如何判断究竟对child是save还是update呢？它会取一下child的主键属性 child.getId() ，这里假设id是 java.lang.Integer类型的。如果取到的Id值和hbm映射文件中指定的unsave-value相等，那么Hibernate认为child是新的内存临时对象，发送save，如果不相等，那么Hibernate认为child是已经持久过的对象，发送update。<br /><br />unsaved-value="null" (默认情况，适用于大多数对象类型主键 Integer/Long/String/...)<br /><br />当Hibernate取一下child的Id，取出来的是null(在上例中肯定取出来的是null)，和unsaved-value设定值相等，发送save(child)<br /><br />当Hibernate取一下child的id，取出来的不是null，那么和unsaved-value设定值不相等，发送update(child)<br /><br />例如下面的情况：<br /><br />[code:1]Session session = ...;<br />Transaction tx = ...;<br /><br />Parent parent = &#40;Parent&#41; session.load&#40;Parent.class, id&#41;;<br />Child child = &#40;Child&#41; session.load&#40;Child.class, childId&#41;;<br /><br />child.setParent&#40;parent&#41;;<br />child.setName&#40;&quot;sun&quot;&#41;;<br /><br />parent.addChild&#40;child&#41;;<br />s.update&#40;parent&#41;;<br /><br />s.flush&#40;&#41;;<br />tx.commit&#40;&#41;;<br />s.close&#40;&#41;;[/code:1]<br /><br />child已经在数据库中有了，是一个持久化的对象，不是新创建的，因此我们希望Hibernate发送update(child)，在该例中，Hibernate取一下child.getId()，和unsave-value指定的null比对一下，发现不相等，那么发送update(child)。<br /><br />BTW: parent对象不需要操心，因为程序显式的对parent有load操作和update的操作，不需要Hibernate自己来判断究竟是save还是update了。我们要注意的只是child对象的操作。另外unsaved-value是定义在Child类的主键属性中的。<br /><br />[code:1]&lt;class name=&quot;Child&quot; table=&quot;child&quot;&gt;<br />&lt;id column=&quot;id&quot; name=&quot;id&quot; type=&quot;integer&quot; unsaved-value=&quot;null&quot;&gt;<br />  &lt;generator class=&quot;identity&quot;/&gt;<br />&lt;/id&gt;<br />...<br />&lt;/class&gt;[/code:1]<br /><br />如果主键属性不是对象型，而是基本类型，如int/long/double/...，那么你需要指定一个数值型的unsaved-value，例如：<br /><br />[code:1]unsaved-null=&quot;0&quot;[/code:1]<br /><br />在此提醒大家，很多人以为对主键属性定义为int/long，比定义为Integer/Long运行效率来得高，认为基本类型不需要进行对象的封装和解构操作，因此喜欢把主键定义为int/long的。但实际上，Hibernate内部总是把主键转换为对象型进行操作的，就算你定义为int/long型的，Hibernate内部也要进行一次对象构造操作，返回给你的时候，还要进行解构操作，效率可能反而低也说不定。因此大家一定要扭转一个观点，在Hibernate中，主键属性定义为基本类型，并不能够比定义为对象型效率来的高，而且也多了很多麻烦，因此建议大家使用对象型的Integer/Long定义主键。<br /><br />unsaved-value="none"和<br />unsaved-value="any"<br /><br />主主要用在主键属性不是通过Hibernate生成，而是程序自己setId()的时候。<br /><br />在这里多说一句，强烈建议使用Hibernate的id generator，或者你可以自己扩展Hibernate的id generator，特别注意不要使用有实际含义的字段当做主键来用！例如用户类User，很多人喜欢用用户登陆名称做为主键，这是一个很不好的习惯，当用户类和其他实体类有关联关系的时候，万一你需要修改用户登陆名称，一改就需要改好几张表中的数据。偶合性太高，而如果你使用无业务意义的id generator，那么修改用户名称，就只修改user表就行了。<br /><br />由这个问题引申出来，如果你严格按照这个原则来设计数据库，那么你基本上是用不到手工来setId()的，你用Hibernate的id generator就OK了。因此你也不需要了解当<br /><br />unsaved-value="none"和<br />unsaved-value="any"<br /><br />究竟有什么含义了。如果你非要用assigned不可，那么继续解释一下：<br /><br />unsaved-value="none" 的时候，由于不论主键属性为任何值，都不可能为none，因此Hibernate总是对child对象发送update(child)<br /><br />unsaved-value="any" 的时候，由于不论主键属性为任何值，都肯定为any，因此Hibernate总是对child对象发送save(child)<br /><br />大多数情况下，你可以避免使用assigned，只有当你使用复合主键的时候不得不手工setId()，这时候需要你自己考虑究竟怎么设置unsaved-value了，根据你自己的需要来定。<br /><br />BTW: Gavin King强烈不建议使用composite-id，强烈建议使用UserType。<br /><br />因此，如果你在系统设计的时候，遵循如下原则：<br /><br /><span style="color: red">1、使用Hibernate的id generator来生成无业务意义的主键，不使用有业务含义的字段做主键，不使用assigned。<br /><br />2、使用对象类型(String/Integer/Long/...)来做主键，而不使用基础类型(int/long/...)做主键<br /><br />3、不使用composite-id来处理复合主键的情况，而使用UserType来处理该种情况。</span><br /><br />那么你永远用的是unsaved-value="null" ，不可能用到any/none/..了。
          <br/>
          <span style="color:red;">
            <a href="http://rain16881.javaeye.com/blog/164076#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 22 Feb 2008 05:15:36 +0800</pubDate>
        <link>http://rain16881.javaeye.com/blog/164076</link>
        <guid>http://rain16881.javaeye.com/blog/164076</guid>
      </item>
      <item>
        <title>js请求问题.在src中的写法</title>
        <author>rain16881</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://rain16881.javaeye.com">rain16881</a>&nbsp;
          链接：<a href="http://rain16881.javaeye.com/blog/162095" style="color:red;">http://rain16881.javaeye.com/blog/162095</a>&nbsp;
          发表时间: 2008年02月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          &lt;script src="http://XXXX/public/0/modi=1202302800000&citycode=59845&mid=8&tid=8/prev.js" type="text/javascript"><br />我想请问..这样的一个东西..有什么作用呢..在实际的js文件前边加了一些参数什么的<br /><br />modi=1202302800000&citycode=59845&mid=8&tid=8这个明显就是一个get的请求参数.<br /><br />本人见过的就是在src中写.do请求..只要返回正确的可以执行的js代码就可以在页面中用了..<br /><br />但这个..请求在前边...小弟就不明白了<br /><br />小弟我对于这样的写法在网上找了久..还是没找到..请各位可以指点下小弟..
          <br/>
          <span style="color:red;">
            <a href="http://rain16881.javaeye.com/blog/162095#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 13 Feb 2008 17:18:00 +0800</pubDate>
        <link>http://rain16881.javaeye.com/blog/162095</link>
        <guid>http://rain16881.javaeye.com/blog/162095</guid>
      </item>
      <item>
        <title>请问.像javaeye的博客的二级域名实现访问是如何实现的</title>
        <author>rain16881</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://rain16881.javaeye.com">rain16881</a>&nbsp;
          链接：<a href="http://rain16881.javaeye.com/blog/158157" style="color:red;">http://rain16881.javaeye.com/blog/158157</a>&nbsp;
          发表时间: 2008年01月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          对于二级域名实现访问博客.我看了好多..<br /><br />都是对服务器的配置做的..<br /><br />那个都是静态改服务器的配置文件..<br /><br />像apache的..<br /><br />假如有一博客可以这样访问.www.javaeye.com/login.do?user=XXX<br /><br />他是可以配置成这样来访问http://XXX.javaeye.com  类似这样..<br /><br />我想问的就是.<br /><br />javaeye要用这样的方式做成博客的二级域名访问的吗?<br /><br />望指教
          <br/>
          <span style="color:red;">
            <a href="http://rain16881.javaeye.com/blog/158157#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 21 Jan 2008 20:41:36 +0800</pubDate>
        <link>http://rain16881.javaeye.com/blog/158157</link>
        <guid>http://rain16881.javaeye.com/blog/158157</guid>
      </item>
      <item>
        <title>出色的中山人[转]</title>
        <author>rain16881</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://rain16881.javaeye.com">rain16881</a>&nbsp;
          链接：<a href="http://rain16881.javaeye.com/blog/157604" style="color:red;">http://rain16881.javaeye.com/blog/157604</a>&nbsp;
          发表时间: 2008年01月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          先说说对公司的印象和感觉吧...心路历程...这两年多....在我成长中....占了很重的份量.... <br /><br />06年1月进中企动力中山分公司担任设计师.....当时是以高姿态.....高薪跳槽.....的身份来到中企动力的..... <br />我在公司眼中....高薪聘请....设计很好....拿过全国大奖的设计师.... <br />我选择进中企动力的原因...很简单...为了挑战自己.... <br /><br /><br />真的是一场很大的挑战啊....记得当时....刚入中企动力头两个月....超人的压力.... <br />我这么好强的人...在头两个月里....竟有想过跳楼....压力能逼到我想跳楼啊....哈哈....只是想想而已.... <br />恐怖的压力....力不从心...无可奈何...有点想死... <br />我只对自己说..."如果这样就认输....是一辈子的遗憾....我会看不起自己....永远抬不起头...." <br />凭着这个想法....当时我只能挺下去....咬紧牙挺..... <br /><br /><br />第三个月开始....终于开始习惯了中企的工作模式....我的工作正常了....压力没这么大了....习惯了就好.... <br />刚入中企第三个月....一个月内做11个网站....破了中山分公司的历史记录....还上了全国的设计师排名榜.... <br />破了记录...相应的报酬也高了....每个月交个人所得税....也让我心痛....呵呵....交得税越多证明收入越高嘛.... <br />这个不是重点....但也是原因之一啦....毕竟我付出的劳动得到了还不算太差的报酬.....只是牺牲了技术而已... <br />就在那时候开始....公司的同事都称我为...."高效王"....(高效是我们内部称做单很快的意思) <br />打后半年...都有较为突出的表现....到了06年9月份....公司因业务的发展....在珠海开设新的分公司.... <br />当时在中山分公司选拨精英的经理人调派过去.....公司给了我机会....但最终某些原因....我放弃了这个机会.... <br />什么原因?....我本身的性格就是喜欢到处跑....不喜欢依赖家的人....在广州SOHO了四年....为什么要回中山? <br />为的不是事业....为的是我的家.... <br /><br /><br />一直下来....就是为了追求量而做单....心里只有一个"快"字....用口说服客户的时间比我做设计的时间还要长.... <br />追求快嘛....肯定不要改来改去浪费时间....大 <br />家可以想想....最高峰时...我一个月能做11个网站 (客户沟通+美工设计+网站程序) <br />平均3天做一个网站.....能出我们心中的精品吗?..... <br />我能做到客户心中的精品...客户满意....但我真的不否认....我做不到自己心里的精品.... <br /><br /><br />说到这里....我回想一下....在中企动力工作两年多.....为了工作我哭了四次.... <br />一次就是刚进来头两个月...有跳楼想法时....晚上....我关在房里....哭了.... <br /><br /><br />一次....在06年10月左右吧....像我刚才所说的....为了追求快....做不到自己心里的精品时... <br />那天我还记得在公司开会....北京总公司下发几个国际品牌的精品网站让我们学习..... <br />学习时候....经理大概意思说....聘请得进来中企的设计师...每一个都有来头的....每一个的设计都是最好的.... <br />那为什么我们在做单时候....就做不到精品出来?.....(大家都沉默了) <br />当时....有一家全国出名....可以说是在广告界响当当的广告公司....这家公司一个设计总监出来开了另一家公司.... <br />他请我过去他的新公司帮忙....说了一大堆设计想法.... <br />我的确很想去....他说的想法....正好是我要想的....真的很想要.... <br />后来也是为了某些原因....说白了就是为了家里两位老人家....为了收入稳定....让他们过得好一点....我选择放弃了.... <br />在学习中....大家沉默时....我就想回这件事....还想起....现在做的作品....跟我03年的作品....真是退步了.... <br />自己在想....钱真的那么重要吗?....进中企大半年....做出来的....真的算是垃圾.... <br />(我只是指本人的作品)....真的有点垃圾.... <br />在同行里....我根本没胆拿出来....失礼啊.... <br />回忆里还记得....我以前是怎么样做设计的....为了完成一个心中完美的作品....能做很多很多... <br />拿起自己的摄影机....拿起自己的画笔....真的很舒服.... <br />就这样...我沉默下去....为了生活低头.... <br /><br /><br />到了12月....公司年度销售大会....我们技术部受到重大打击....我们都无言...无奈.... <br />设计师与商务之间的矛盾....不是一两语能说得清楚....利益冲突....真的很的原因....我也不想解释太多.... <br />全部门的同事都觉得难受....那一次....第三次落泪....为了是集体...为了是部门.... <br />开完大会...我回家写了一封信EMAIL给经理...写了很多很多....难受....写我的无奈....写我的感受.... <br />这封信...一直都没公开过....只有我和经理知道.... <br />算是公司老设计员了...肯定会协助商务去签单....搞点什么忽悠的事....会良心发现吗?....说实在的....会.... <br />我是搞设计的....不是搞忽悠的....(忽悠对像都是上年纪的老板...真的以为这么容易忽悠过去吗?) <br />但没办法...一定要协助... <br />协助商务...把公司的产品抬到上天....把一些不适合客户用的产品....为了拿钱....说到非常适合客户.... <br />必竟...以设计师身份去说...客户会比较信任的.... <br />陪商务去签单....能签到单那还好...签不到...那就是设计师问题罗....呵呵....真无奈.... <br />眼睁睁看着....客户用十几万做网站... <br />可以说....十几万就做一个从设计师口中所虚构的完美网站...真的有点过意不去.... <br />我不是说设计师做不出十几万的物超所值的网站....只是太多原因影响了.... <br />这点涉及到一些商业销售路线...我就不多说了.... <br />只有在中企的设计师....都会心里有数.... <br /><br /><br />时间过得很快....又这样为了快....为了钱....麻木做单下去....麻木忽悠下去....时间一长... <br />到了07年4月....让我最深刻.... <br />在公司做为一位老设计师....设计水平不用说了...就算是为了快....但必竟还有质量保证的....忽悠能力更不差啦.... <br />给一张单...差点让我二次跳楼.... <br />做一个网站..出版好几个...做来做去...客户都说:"没感觉"....玩死了我.... <br />自我检讨....是我沟通能力不到位吗?.....绝对不是....对客户说什么...引导什么...反馈只一句:"没感觉..." <br />再次检讨....我的设计能力落伍了吗?.....绝对不是....这点打死都不承认.... <br />(你要说一位设计师不会设计....感觉像....跟一个男人说你是性无能.....一样效果....简直想死....) <br />最后找到原因了....我现在说出来没什么吧?....我真的很气....真的很无奈.... <br />是商务去客户签单时...为了能签下来...串通客户下面的员工....签了单就给那员工回扣.... <br />(商场上这个行为虽然不好...但见怪不怪) <br />单就这样签了...商务反口了...不给这员工回扣了...所以不管设计师做了多好的作品....那位员工也会说"没感觉".... <br />后来才发现....在没找出原因之前做的好几个版....那个客户(就是那位老板)....完全没看过...也完全不知道出了版.... <br />原因找出来了....那老板也看了我做的版了....一句:"不错...就用这个吧".... <br />当时我哭了....不是为通过这个版面而哭....是觉得无奈.... <br />当时自己想....我到底怎么啦?....我为了钱...为了生活....把自己掉了....把快乐掉了....把我最初的梦想也掉了... <br />折腾折腾...心理一直不平行...我偷偷去看心理医生了...医生说我有抑郁...这事我没跟任何人说过...<br />因为我知道把自己的事跟别人说了...别人帮不了我...说来也没用....只要找出原因...我会好起来的...<br /><br />除了公司赚钱...还拼命做了很多私活... <br />为了让家人生活更好...只要爸妈需要的东西....我做女儿的发誓....我必要全部满足....说真的...这样做真的有压力.... <br />为什么我有这样想法...其实要说回从广州回中山时....当时是家人叫我回去的...我自己根本没这个打算... <br />中山必竟有很多....我不想记起的东西....让我难受.... <br />在广州回家的那一天...我给自己时间....一年两年时间做到全满足家人.... <br />之后我又自由了....之后我可以心安理得.....又走了.... <br />为了赚多点钱....就一直工作....对家里少了关心....物质不能满足一切... <br />家人想要的是关心....其实关心最重要...可能当时入了思想误区吧.... <br />就这样一直折腾一下了..... <br /><br /><br />到07年12月....就是在前一阵....我看书时....看到很有意思的东东....是一位科学家研究出来的 "快乐方程式" <br />快乐  =  自身性格40%  +  外来因素影响20%  +  交际与遭遇40% <br />看明白了吗?.....我一直以为钱就能带来快乐....原来快乐是不受钱因素的影响的.... <br />现在我只想快乐.... <br />决定了....放下所有包袱....我要去做自己想做的事....我跟家人都商量了....把所有原因都说了...把所有感觉都说了.... <br />家人说你喜欢做就大胆去做....不要令自己辛苦....家里永远支持你.... <br />(我感动啊...有家里的精神支持....什么都行了...有勇气了...) <br />起码我感觉到家人对我的体谅.... <br />都决定好了....是时候把我的梦想实现了....折腾了这么久.... <br />该放下包袱了...不管成功与否...我不为钱...只为我的梦想... <br />(学周星池说的....人如果无梦想...同条咸鱼有咩分别啊?)....哈哈哈 <br />实现了....就算失败了....到老时回头再看看....我无悔.... <br />之前就是有精神负担....才难以取舍中企的工作....现在得到家人的支持.... <br />我没有精神负担了....可以做自己想做的啦... <br /><br /><br />我决定辞职了....开我的设计为主题的咖啡厅.... <br />转来转去....还是有设计的份....为什么?....因为我现在能大声告诉你们... <br />我爱设计....我爱我的设计....我爱这感觉..... <br /><br /><br />嘻嘻....轻松....开心....我头一次精神上得到满足的感觉.... <br />为了自己设计而折腾.....是很开心的事....真的.... <br />给我两年时间....我要找我的梦想...找我的快乐....找我的幸福.... <br />我真的可以再次拿起自己的画笔...自己的摄影机....做出自己的作品了....我已经三年没这感觉了... <br />有点初恋的感觉....哈哈哈哈哈...... <br /><br />说回吧...长这么大...我佩服和感谢四个人...其中不少得的是我爸妈....他们教会我做人....<br />第三个....是OnCity的老板...小站...是他带我出身...带我入设计这一行的...<br />第四个....是中企技术部经理...陈平...是他教会我做事....
          <br/>
          <span style="color:red;">
            <a href="http://rain16881.javaeye.com/blog/157604#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 19 Jan 2008 16:36:29 +0800</pubDate>
        <link>http://rain16881.javaeye.com/blog/157604</link>
        <guid>http://rain16881.javaeye.com/blog/157604</guid>
      </item>
      <item>
        <title>Ext数据处理</title>
        <author>rain16881</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://rain16881.javaeye.com">rain16881</a>&nbsp;
          链接：<a href="http://rain16881.javaeye.com/blog/148401" style="color:red;">http://rain16881.javaeye.com/blog/148401</a>&nbsp;
          发表时间: 2007年12月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我提交数据就是使用的。 <br />var m = ds.getModifiedRecords(); <br />var jsonData = '[' ; <br />for(var i=0;i&lt;m.length;i++){ <br />jsonData = jsonData + ',' 　　　　　　　　　　　　　　+ Ext.util.JSON.encode(m[i].data); <br />}
          <br/>
          <span style="color:red;">
            <a href="http://rain16881.javaeye.com/blog/148401#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 14 Dec 2007 17:44:38 +0800</pubDate>
        <link>http://rain16881.javaeye.com/blog/148401</link>
        <guid>http://rain16881.javaeye.com/blog/148401</guid>
      </item>
      <item>
        <title>spring hibernate 级联删除 mysql</title>
        <author>rain16881</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://rain16881.javaeye.com">rain16881</a>&nbsp;
          链接：<a href="http://rain16881.javaeye.com/blog/147392" style="color:red;">http://rain16881.javaeye.com/blog/147392</a>&nbsp;
          发表时间: 2007年12月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          4.4.3. 根据映射对象生成映射文件上节提到了用hbm2java将影射文件生成映射对象，依靠xdoclet标签完成。xdoclet也是依靠此标签完成与影射文件的 同步。这样实际开发中会带来很大的便利，我们只要维护代码，而不需要手动维护与影射文件的同步。xdoclet标签 可以由上节讲的方法去转化得来，当然如果熟悉了xdoclet标签，手动完成即可。xdoclet的使用很方便，可以加入我 们已有的ant任务中（如果尚未了解Ant，请参看相关章节）。 <br />1、下载xdoclet。 <br />2、建立构建文件 <br />例 4.12. build.xml<br />&lt;?xml version="1.0" encoding="ISO-8859-1"?><br />&lt;project name="XDoclet Examples" default="hibernate" basedir="."><br />    &lt;property name="xdoclet.root.dir" value="c:/xdoclet-1.2.2"/><br />    &lt;property name="xdoclet.lib.dir" value="${xdoclet.root.dir}/lib"/><br /> &lt;property name="samples.gen-src.dir" value="./gen-src"/><br />    &lt;path id="classpath"><br />        &lt;fileset dir="${xdoclet.lib.dir}"><br />            &lt;include name="*.jar"/><br />        &lt;/fileset><br />    &lt;/path><br />     &lt;taskdef<br />        name="hibernatedoclet"<br />        classname="xdoclet.modules.hibernate.HibernateDocletTask"<br />        classpathref="classpath"<br />        /><br />    &lt;target name="hibernate" description="Generate mapping documents"><br />        &lt;echo>+---------------------------------------------------+&lt;/echo><br />        &lt;echo>|                                                   |&lt;/echo><br />        &lt;echo>| R U N N I N G   H I B E R N A T E D O C L E T     |&lt;/echo><br />        &lt;echo>|                                                   |&lt;/echo><br />        &lt;echo>+---------------------------------------------------+&lt;/echo><br />        &lt;hibernatedoclet<br />            destdir="${samples.gen-src.dir}"<br />            excludedtags="@version,@author,@todo,@see"<br />            addedtags="@xdoclet-generated at ${TODAY},@copyright The XDoclet Team,@author XDoclet,@version ${version}"<br />            force="false"<br />            verbose="true"><br />            &lt;fileset dir="${samples.gen-src.dir}"><br />                &lt;include name="com/m5/Book.java"/><br />            &lt;/fileset><br />         &lt;hibernate version="2.1"/><br />        &lt;/hibernatedoclet><br />    &lt;/target><br />&lt;/project><br />    build.xml中的目录结构均为笔者环境的，使用时请修改成对应的目录。 <br />3、运行ant，在输出目录生成对应的影射文件。 <br />建议：如果你觉得hibernate的映射文件放在一个xml文件更为方便，可以通过修改xdoclet的源码， 使其生成的映射文件全部放置在制定的xml文件中，这样生成新的映射文件时不需要去维护hibernate 的配置文件中对影射文件的引用，当然也有弊端，多人开发时，关于版本控制冲突，以及可读性降低。 以上建议仅供参考。 <br />4.5. 专用词<br />在讲述关联关系之前，有必要解释下一些专用词的含义 <br />4.5.1. cascade(级联)级联在编程中经常接触，写过触发器来修改或删除关联表相记录的一定会知道，触发器的作用是当 主控表信息改变时，用来保证其关联表中数据同步更新。比如一个employee存放职员信息，一个 timecard存放职员的考勤信息，当从职员表中删除一个职员时，timecard表中对应的考勤信息 已经没有意义，因为其所属的职员已不存在，如果继续留在timecard表中就成了没用的也称脏数据。 理想的做法是在删除职员信息的同时将该职员信息对应的考勤信息也删除。在hibernate中如果要达到这个 效果只需要设置cascade属性值即可。当然是否进行级联关系要根据实际情况慎重考虑。 <br />4.5.2. inverse(反转)表与表之间的关联，我们通常将主动发起关联请求的表称为主动表，被关联的表成为被动表，hibernate中 将此概念冠以在表所对应的对象上，因此将主动发起关联请求的对象称为主动对象或主控对象，被关联的对象 称为被动对象或被控对象。hibernate由主动对象维护关联关系，在实际中经常碰到一个对象的关联角色并不 那么明确，如双向关联，这时inverse值用来标明由谁来维护关联关系。设为true时反转控制角色，即由该 属性关联的对象维护关联关系。 <br />4.5.3. Lazy Loading(延时装载)延时装载主要是从性能方面的考虑，对于 “select coulmn1 from table”和“select * from table”语句 的性能比较，相信大家不会有异议，第一条的执行性能要高于第二条，当然这个表中字段存储的信息应该能充分 体现出优越性为前提，比如说一个employee表中存放有，职员姓名、年龄、照片等，如果只需要查看姓名和年龄， 那么照片信息就不应该附带出来。表与表之间的关联也应如此，如果不需要用到关联表中的数据就不应该去进行关 联操作，或在需要的时候才启动关联操作。让数据在最恰当的时候才出现，这就是延时装载。 <br />4.6. 一对一表关联操作<br />前面章节的例子是单表的操作，实际开发中表之间的关联操作是必不可少的。 本章以书籍与出版社之间的关联为例,来讲述一对一的关联操作。 <br />一对一关系在hibernate中以one-to-one表示，本例中以Book类为主动连接方，因此在Book.java中加入 关联Publish的属性。一对一关联在hibernate中有两种方式: <br />主键关联:不需借助外部字段，直接通过两个表的主键进行关联，因此必须保证两个表的主键值一 致，这通常通常借助foreign标识符生成器策略来完成。简单来说，这种情况就是两个表的主键 相等的内连接。 <br />唯一外键关联：在主动方加入外键进行关联，这样主动方与被动方的影射关系实际上就成了多对一的关联。 <br />为方便查询，在此描述one-to-one节点的属性含义（也可参考hibernate的官方指导手册，有中英文对照很方便） <br />&lt;one-to-one<br />        name="propertyName"   (1)          <br />        class="ClassName"   (2)<br />        cascade="all|none|save-update|delete" (3)<br />        constrained="true|false"  (4)<br />        outer-join="true|false|auto"  (5)<br />        property-ref="propertyNameFromAssociatedClass"  (6)<br />        access="field|property|ClassName"  (7)<br />/><br />  (1)  name：映射属性的名称。 <br /> <br />(2)  class（可选）：被关联的类的名称，如果省略此属性，则通过反射机制得到与此属性名称一致的类。 <br /> <br />(3)  cascade（可选）：表明操作是否从父对象级联到被关联的对象，all，为所有变更动作都进行级联操作；none，为 从来不作级联操作；save-update，为insert,update动作时作级联操作。delete，为delete动作时作级联操作。 <br /> <br />(4)  constrained（可选）：表明该类对应的表对应的数据库表，和被关联的对象所对应的数据库表之间，通过一个外键 引用对主键进行约束。这个选项影响save()和delete()在级联执行时的先后顺序。 <br /> <br />(5)  outer-join（可选）：是否允许外连接抓取；默认是auto,关联对象没有采用proxy机制时使用外联接。 <br /> <br />(6)  property-ref（可选）：指定关联类的一个属性，这个属性将会和本外键相对应。默认为关联类的主键。 <br /> <br />(7)  access（可选）：Hibernate用来访问属性的策略，默认是property. <br /> <br /><br />首先来看通过主键进行一对一的关联操作： <br />表 4.2. book<br />id name price <br />1  《Basic》  12.00  <br />2  《Pasic》  15.00  <br /><br />表 4.3. Publish<br />id name address <br />1  机械出版社  北京朝阳区  <br />2  教育出版社  北京海底区  <br /><br />1、建立映射文件<br />例 4.13. hibernate_map.xml<br />&lt;hibernate-mapping><br /> &lt;!--one to one--><br />     &lt;class name="hibernate.relation.oneToOne.Book" table="Book"><br />  &lt;id name="id" column="id" type="java.lang.Integer"><br />   &lt;generator class="foreign"><br />    &lt;param name="property">publish&lt;/param><br />   &lt;/generator><br />  &lt;/id><br />  &lt;property name="name" type="java.lang.String" column="name" length="100" not-null="true" /><br />  &lt;property name="price" type="long" column="price" length="100" not-null="true" /><br />  &lt;one-to-one name="publish" class="hibernate.relation.oneToOne.Publish" cascade="none" outer-join="auto" constrained="false" /><br />  &lt;/class><br /> <br />  &lt;class name="hibernate.relation.oneToOne.Publish" table="Publish"><br />  &lt;id name="id" column="id" type="java.lang.Integer"><br />   &lt;generator class="native">&lt;/generator><br />  &lt;/id><br />  &lt;property name="name" type="java.lang.String" column="name" length="100" not-null="true" /><br />  &lt;property name="address" type="java.lang.String" column="address" length="100" not-null="true" /><br />  &lt;/class><br />&lt;/hibernate-mapping><br />   2、建立映射类<br />例 4.14. Book.java<br />package hibernate.relation.oneToOne;<br />import java.io.Serializable;<br />import org.apache.commons.lang.builder.ToStringBuilder;<br />public class Book implements Serializable {<br />    private Integer id;<br />    private String name;<br />    private long price;<br />    private Publish publish = null;<br />    public Book(Integer id, String name, long price) {<br />        this.id = id;<br />        this.name = name;<br />        this.price = price;<br />    }<br />    public Book() {<br />    }<br />    public Integer getId() {<br />        return this.id;<br />    }<br />    public void setId(Integer id) {<br />        this.id = id;<br />    }<br />  <br />    public String getName() {<br />        return this.name;<br />    }<br />    public void setName(String name) {<br />        this.name = name;<br />    }<br />   <br />    public long getPrice() {<br />        return this.price;<br />    }<br />    public void setPrice(long price) {<br />        this.price = price;<br />    }<br />    <br />  <br />    public Publish getPublish()<br />    {<br />     return this.publish;<br />    }<br />    <br />    public void setPublish(Publish publish)<br />    {<br />     this.publish = publish;<br />    }<br />    public String toString() {<br />        return new ToStringBuilder(this)<br />            .append("id", getId())<br />            .toString();<br />    }<br />}<br />   例 4.15. Publish.java<br />package hibernate.relation.oneToOne;<br />import java.io.Serializable;<br />import org.apache.commons.lang.builder.ToStringBuilder;<br />public class Publish implements Serializable {<br />    private Integer id;<br />    private String name;<br />    private String address;<br />    public Publish(Integer id, String name, String address) {<br />        this.id = id;<br />        this.name = name;<br />        this.address = address;<br />    }<br />    public Publish() {<br />    }<br />    public Integer getId() {<br />        return this.id;<br />    }<br />    public void setId(Integer id) {<br />        this.id = id;<br />    }<br />    public String getName() {<br />        return this.name;<br />    }<br />    public void setName(String name) {<br />        this.name = name;<br />    }<br />    public String getAddress() {<br />        return this.address;<br />    }<br />    public void setAddress(String address) {<br />        this.address = address;<br />    }<br />    public String toString() {<br />        return new ToStringBuilder(this)<br />            .append("id", getId())<br />            .toString();<br />    }<br />}<br />   3、演示代码<br />例 4.16. BookTest.java<br />public class BookTest extends TestCase <br />{<br /> private String hql;<br /> private SessionFactory sessionFactory;<br /> private Session session;<br /> private List list;<br /> <br /> protected void setUp() throws Exception <br /> {<br />  File file = new File("d:\\hibernate.cfg.xml");<br />  Configuration config = new Configuration().configure(file);<br />  sessionFactory = config.buildSessionFactory();<br />  session = sessionFactory.openSession();<br /> }<br /> <br /> public void testSave() throws HibernateException   <br /> {<br />  Book book = new Book();<br />  book.setName("《Basic》");<br />  book.setPrice(Long.parseLong("12"));<br />  Publish publish = new Publish();<br />  publish.setName("机械出版社");<br />  publish.setAddress("北京朝阳");<br />  book.setPublish(publish);<br />  session.save(book);<br />  session.flush();<br /> }<br />  <br /> public void tesQuery() throws HibernateException   <br /> {<br />  String publishName = null;<br />  hql = "from hibernate.relation.oneToOne.Book as book where book.id = 1";<br />  List books = session.find(hql);<br />  for ( int i=0; i &lt; books.size(); i++ )<br />  {<br />   Book book = (Book)books.get(i);<br />   publishName = book.getPublish().getName();<br />   System.out.println("对应的出版社为：" + publishName);<br />  }<br /> }<br />}<br />   插入时将执行如下语句： <br />Hibernate: insert into Publish (name, address) values (?, ?) <br />Hibernate: insert into Book (name, price, id) values (?, ?, ?) <br />这是因为我们在Book映射文件中设置了其id值为外键生成策略，所以Hibernate会先插入 Publish,然后用publish的主键值填充Book的主键值，以保证Publish与Book表的主键 值相等。 <br />执行查询语句将执行如下语句： <br />Hibernate: select book0_.id as id, book0_.name as name, book0_.price as price from Book book0_ where (book0_.id=39 ) <br />Hibernate: select publish0_.id as id0_, publish0_.name as name0_, publish0_.address as address0_ from Publish publish0_ where publish0_.id=? <br />以上示例通过Book、publish两个表的主键形成关联，接下来看如何通过外键关联完成该例子。<br />4.7. 多对一表关联操作<br />我们在Book表中添加publishId的外键，用来与publish表形成关联。 <br />表 4.4. book<br />id publishId name price <br />1  1  《Basic》  12.00  <br />2  2  《Pasic》  15.00  <br /><br />1、建立映射文件<br />例 4.17. hibernate_map.xml<br />&lt;hibernate-mapping><br /> &lt;!--one to one--><br />     &lt;class name="hibernate.relation.oneToOne.Book" table="Book"><br />  &lt;id name="id" column="id" type="java.lang.Integer"><br />   &lt;generator class="native" /><br />  &lt;/id><br />  &lt;property name="name" type="java.lang.String" column="name" length="100" not-null="true" /><br />  &lt;property name="price" type="long" column="price" length="100" not-null="true" /><br />  &lt;many-to-one name="publish" class="hibernate.relation.oneToOne.Publish" cascade="all" outer-join="auto"/><br />  &lt;/class><br /> ...<br />&lt;/hibernate-mapping><br />   只将book映射文件的one-to-one修改成many-to-one，其他的保持不变，执行BookTest.java文件，将看到 与one-to-one同样的效果。（注意：cascade="all"，这里设置级联是必须的，因为在插入book时应该先得到 publishid的值。） <br />上面的例子都是以Book为主动关联方进行操作，如果需要在操作Publish时获取关联的Book对象，我们需要在 Publish中加入与Book的关联映射，这样Book与Publish之间就形成了双向关联，这里假设Publish与Book是 一对多的关系，具体操作请看下一章节。 <br />4.8. 一对多表关联操作<br />1、在publish映射中加入一对多关系 <br />例 4.18. hibernate_map.xml<br />...<br />&lt;class name="hibernate.relation.oneToOne.Publish" table="Publish"><br />  &lt;id name="id" column="id" type="java.lang.Integer"><br />   &lt;generator class="native">&lt;/generator><br />  &lt;/id><br />  &lt;property name="name" type="java.lang.String" column="name" length="100" not-null="true" /><br />  &lt;property name="address" type="java.lang.String" column="address" length="100" not-null="true" /><br />  &lt;set name="book" table="book" lazy="false" cascade="none" sort="unsorted" inverse="false"><br />   &lt;key column="publishId" /><br />   &lt;one-to-many class="hibernate.relation.manyToOne.Book" /><br />  &lt;/set><br />&lt;/class><br />   2、在Publish映射类中加入book属性 <br />例 4.19. Publish.java<br />private Set book = new HashSet();<br />public Set getBook()<br />{<br /> return book;<br />}<br />public void setBook(Set book)<br />{<br /> this.book = book;<br />}<br />   这样就能在操作Publish时也能获取到与之关联的Book信息，看测试代码： <br />例 4.20. Publish.java<br />Publish publish = (Publish)session.get(Publish.class,Integer.valueOf(1));<br />Set books = publish.getBook();<br />for (Iterator it = books.iterator(); it.hasNext();)<br />{<br /> Book book = (Book)it.next();<br /> System.out.println("对应的书籍为：" + book.getName());<br /> }    <br />   执行上面的代码显示的结果为： <br />Hibernate: select publish0_.id as id0_, publish0_.name as name0_, publish0_.address as address0_ from Publish publish0_ where publish0_.id=? <br />Hibernate: select book0_.id as id__, book0_.publishId as publishId__, book0_.id as id0_, book0_.name as name0_, book0_.price as price0_, book0_.publishId as publishId0_ from Book book0_ where book0_.publishId=? <br />对应的书籍为：《Basic》 <br />4.9. 多对多表关联操作<br />多对多的关联在实际的开发中也是经常被用到的，假设现有一个员工表来存放所有员工的信息， 一个福利项目表存放福利明细，要记录每个员工享有的福利明细，同一福利项，多个员工均可享有， 一个员工也可以享有多项福利，这就形成了多对多的关联，在这里我们加入一个福利明细表充当 关联其两者的中间表（多对多的关联一般都是通过中间表进行关联的）。看具体实现： <br />1、表结构如下： <br />表 4.5. Welfare(福利项目表)<br />id(主键递增) name money <br />1  饭补  250.00  <br />2  交通补助  200.00  <br />3  岗位补助  500.00 <br /><br />表 4.6. Empolyee（人员表）<br />id(主键递增) name job <br />1  王一  部门经理  <br />2  李二  程序员 <br /><br />表 4.7. Empolyee_Welfare(员工福利明细表)<br />id(主键递增) EmpolyeeID（员工ID） WelfareID（福利项ID） <br />1  1（王一）  1（饭补）  <br />2  1（王一）  2（交通补助） <br />3  1（王一）  3（岗位补助） <br />4  2（李二）  1（饭补）  <br />5  2（李二）  2（交通补助） <br /><br />2、编写影射文件 <br />例 4.21. Hibernate_map.xml<br />&lt;class name="hibernate.relation.manyToMany.Employee" table="Employee"><br />  &lt;id name="id" column="id" type="java.lang.Integer"><br />   &lt;generator class="native">&lt;/generator><br />  &lt;/id><br />  &lt;property name="name" type="java.lang.String" column="name" length="100" not-null="true" /><br />  &lt;property name="job" type="java.lang.String" column="job" length="100" not-null="true" /><br />  &lt;set name="welfare" table="Empolyee_Welfare" lazy="false"><br />   &lt;key column="EmployeeId" /><br />   &lt;many-to-many class="hibernate.relation.manyToMany.Welfare" column="WelfareId" /><br />  &lt;/set><br />&lt;/class><br />&lt;class name="hibernate.relation.manyToMany.Welfare" table="Welfare"><br />  &lt;id name="id" column="id" type="java.lang.Integer"><br />   &lt;generator class="native">&lt;/generator><br />  &lt;/id><br />  &lt;property name="name" type="java.lang.String" column="name" length="100" not-null="true" /><br />  &lt;property name="money" type="java.lang.Double" column="money" length="18" not-null="true" /><br />  &lt;set name="employee" table="Empolyee_Welfare" lazy="false" inverse="true"><br />   &lt;key column="WelfareId" /><br />   &lt;many-to-many class="hibernate.relation.manyToMany.Employee" column="EmployeeId" /><br />  &lt;/set><br />&lt;/class><br />   3、编写映射类 <br />例 4.22. Employee.java<br />public class Employee <br />{<br /> private int id;<br /> private String name;<br /> private String job;<br /> private Set welfare = new HashSet();<br /> ...<br /> public Set getWelfare()<br /> {<br />  return this.welfare;<br /> }<br />  <br /> public void setWelfare(Set welfare)<br /> {<br />  this.welfare = welfare;<br /> }<br />}<br />   例 4.23. Welfare.java<br />public class Welfare <br />{<br /> private int id;<br /> private String name;<br /> private Double money;<br /> private Set employee = new HashSet();<br /> <br /> ...<br /> public Set getEmployee()<br /> {<br />  return this.employee;<br /> }<br /> <br /> public void setEmployee(Set employee)<br /> {<br />  this.employee = employee;<br /> }<br />}<br />   4、测试代码 <br />例 4.24. Employee.java<br />public void testSave() throws Exception<br /> {<br />  <br />  try<br />  {<br />   tx = session.beginTransaction();<br />   Employee employee = new Employee();<br />   employee.setName("王一");<br />   employee.setJob("程序员");<br />   <br />   Welfare welfare = new Welfare();<br />   welfare.setMoney(Double.valueOf("250"));<br />   welfare.setName("饭补");<br />   <br />   employee.getWelfare().add(welfare);<br />   welfare.getEmployee().add(employee);<br />   <br />   session.save(employee);<br />   session.save(welfare);<br />   tx.commit();<br />  }<br />  catch(Exception ex)<br />  {<br />   if ( tx !=null ) <br />   {<br />    tx.rollback();<br />   }<br />  }<br />  finally<br />  {<br />   session.close();<br />  }<br /> }<br />   执行以上代码Empolyee、Welfare、Empolyee_Welfare表中将各插入一条数据： <br />Hibernate: insert into Employee (name, job) values (?, ?)<br />Hibernate: insert into Welfare (name, money) values (?, ?)<br />Hibernate: insert into salary (EmployeeId, WelfareId) values (?, ?)<br />4.10. 与spring的结合使用<br />上面的例子中我的测试代码都是通过如下代码来建立hibernate的Session。 <br />File file = new File("d:\\hibernate.cfg.xml");<br />Configuration config = new Configuration().configure(file);<br />sessionFactory = config.buildSessionFactory();<br />session = sessionFactory.openSession();<br />  这样做的目的是为了更直观的说明对hibernate的使用，本节将演示结合Spring的使用，使代码更为简洁。 <br />首先，修改spring的配置文件，如下： <br />&lt;beans default-lazy-init="false" default-dependency-check="none" default-autowire="no"><br />    &lt;description><br />    &lt;/description><br />     &lt;bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"><br />        &lt;property name="driverClassName"><br />            &lt;value>org.gjt.mm.mysql.Driver&lt;/value><br />        &lt;/property><br />        &lt;property name="url"><br />            &lt;value>jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=GBK&lt;/value><br />        &lt;/property><br />        &lt;property name="username"><br />            &lt;value>root&lt;/value><br />        &lt;/property><br />        &lt;property name="password"><br />            &lt;value>&lt;/value><br />        &lt;/property><br />    &lt;/bean><br />   <br />   &lt;bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean"><br />        &lt;property name="dataSource"><br />            &lt;ref local="dataSource"/><br />        &lt;/property><br />        &lt;property name="mappingResources"><br />           &lt;list><br />            &lt;value>Hibernate_Map.hbm.xml&lt;/value><br />           &lt;/list> <br />        &lt;/property><br />        &lt;property name="hibernateProperties"><br />            &lt;props><br />                &lt;prop key="hibernate.dialect">net.sf.hibernate.dialect.MySQLDialect&lt;/prop><br />                &lt;prop key="hibernate.show_sql">true&lt;/prop><br />                &lt;prop key="hibernate.cglib.use_reflection_optimizer">true&lt;/prop><br />                &lt;prop key="hibernate.query.substitutions">true 1, false 0&lt;/prop><br />            &lt;/props><br />        &lt;/property><br />    &lt;/bean><br />&lt;beans><br />  上面增加的“dataSource”和“sessionFactory”节点，可以完全替换掉hibernate.cfg.xml的配置信息， 并且在org.springframework.orm.hibernate.LocalSessionFactoryBean类中封装了对hibernate的 session调用。请看如下调用代码： <br />SessionFactory sessionFactory = (SessionFactory)InitSpring.getInstance("sessionFactory");<br />Session session = SessionFactoryUtils.getSession(sessionFactory, false);<br />session.save(...);<br />  上面的代码通过spring配置文件，实例sessionFactory,然后通过SessionFactoryUtils的getSession方法得到session实例。 关于在程序启动时怎样初始化Spring，请参考??? <br />我们还可以通过Spring来实现Hibernate DAO,得到更简洁的调用： <br /> &lt;bean id="DAOTarget" class="hibernate.dao.test.MyDAO"<br />    singleton="true"<br />    lazy-init="default"<br />    dependency-check="default"<br />    autowire="default"<br />    ><br />        &lt;property name="sessionFactory"><br />   &lt;ref local="sessionFactory" /><br />        &lt;/property><br />    &lt;/bean><br />  例 4.25. MyDAO.java<br />public class MyDAO extends HibernateDaoSupport<br />{<br />  getHibernateTemplate().save(...);  <br />}<br />  <br />   上面的代码如果看的不是很明白，没有关系，在DAO章节将详细讲述其实现，这里代码只是想说明， 借助spring能让hibernate的应用更加简洁。 <br />4.11. Hibernate DAO<br />在开始本章之前，先介绍DAO模式的概念，DAO是Data Access Object的缩写，DAO模式思想是将业务逻辑代码与 数据库交互代码分离，降低两者耦合。通过DAO模式可以使结构变得更为清晰，代码更为简洁，本节示例将结合Spring， 演练Hibernate Dao所带来的优越性。 <br />为什么借助Spring实现Hibernate DAO： <br />Spring帮我们封装了针对Hibernate DAO的常用操作。<br />将业务对象与DAO对象的依赖转移到Spring配置文件中。<br />借助Spring AOP功能实现DAO对象中数据库访问的统一事务管理。<br />在开始演练Spring DAO之前，请看一段不借助DAO模式的代码： <br />例 4.26. MyApp.java<br />public void AddUser()<br />{<br /> SessionFactory sessionFactory = (SessionFactory)InitSpring.getInstance("sessionFactory");<br /> Session session = SessionFactoryUtils.getSession(sessionFactory, false);<br /> User user = new User();<br /> user.setName("王一");<br /> String hql = " from User as user where  user.name = '"+ user.name +"' "<br /> List list = session.find(hql);<br /> //进行逻辑判断，如果已经存在相同的用户则不允许添加<br /> if ( list.size() > 0 )<br /> {<br />  ...<br /> }<br /> else<br /> {<br />  try<br />  {<br />   Transaction tx = session.beginTransaction();<br />   session.save(user);<br />   tx.commit();<br />  }<br />  catch(Exception ex)<br />  {<br />   if ( tx !=null ) <br />   {<br />    tx.rollback();<br />    ...<br />   }<br />  }<br />  finally<br />  {<br />   ...<br />   session.close();<br />  }<br /> <br /> }<br />}<br />   以上的代码实现的功能是添加一个用户，且在添加用户之前判断数据库是否有同名用户，应该说逻辑不算复杂， 我们将这种业务逻辑与数据库访问代码写在一块有如下不足之处： <br />降低重用性：该例子中实现了查找用户和添加用户的代码，这种功能很肯能在项目的很多地方都需要用到，但是 我们又不能直接调用AddUser()中实现的类似代码，因为该方法与具体的业务逻辑邦定在一块。 <br />有可能降低代码可读性：当业务逻辑变得复杂时，在该例中既要实现业务逻辑，又要实现数据库访问代码。 <br />造成重复编码：从上面例子的代码中我们可以看到附加了业务逻辑以外的代码，如事务管理、异常捕获。 最理想的业务类完成的功能应该是只实现其自身的业务逻辑。 <br />我们期望的代码是： <br />例 4.27. MyApp.java<br />public void AddUser()<br />{<br /> User user = new User();<br /> user.setName("王一");<br /> if ( findUser(user).size() >0 )<br /> {<br />  ...<br /> }<br /> else<br /> {<br />  saveUser(user); <br /> }<br />}<br />   下面借助Spring来实现Hibernate Dao,来看看是否能达到我们期望的效果： <br />1、将访问数据库的代码从业务类MyApp.java中分离出来，放在DAO对象UserDao.java中 <br />例 4.28. UserDao.java<br />public class UserDao extends HibernateDaoSupport<br />{<br /> public List findUser(User user)<br /> {<br />  String hql = " from User as user where  user.name = '"+ user.name +"' ";<br />  return getHibernateTemplate().find(hql);<br /> }<br /> public void saveUser(User user)<br /> {<br />  getHibernateTemplate().save(user);<br /> }<br />}<br />   2、将业务类MyApp.java与DAO对象关联(在MyApp.java类中增加DAO的属性，以便通过Spring 注入DAO实例)。 <br />例 4.29. Spring_Config.xml<br />&lt;bean id="userDao" class="hibernate.dao.test.UserDao"<br />    singleton="true"<br />    lazy-init="default"<br />    dependency-check="default"<br />    autowire="default"<br />    ><br />        &lt;property name="sessionFactory"><br />   &lt;ref local="sessionFactory" /><br />        &lt;/property><br />&lt;/bean><br />&lt;bean id="myApp" class="hibernate.dao.test.MyApp"<br />    singleton="true"<br />    lazy-init="default"<br />    dependency-check="default"<br />    autowire="default"><br />        &lt;property name="dao"><br />   &lt;ref local="userDao" /><br />        &lt;/property><br />&lt;/bean><br />   3、业务类MyApp.java的实现 <br />例 4.30. MyApp.java<br />public class MyApp <br />{<br /> private UserDao dao;<br /> public void setDao(UserDao dao)<br /> {<br />  this.dao = dao;<br /> }<br /> <br /> public void AddUser()<br /> {<br />  User user = new User();<br />  user.setName("王一");<br />  if ( dao.findUser(user).size() >0 )<br />  {<br />   ...<br />  }<br />  else<br />  {<br />   dao.saveUser(user); <br />  }<br /> }<br />}<br />   从MyApp.java可以看到与我们期望的效果几乎一样,在实际开发中我们应该让业务类与DAO类分别针对其接口 做实现，这样在代码中可以只针对于接口做引用，从而降低调用类与具体实现类的耦合，这里为更简洁的说明问 题省略对其各自接口的定义。 <br />第 5 章 log4j<br />5.1. 概述<br />log4j是用于java语言的日志记录工具,一个完整的商业软件，日志是必不可少的。现实开发 中日志记录多种多样，有打印在控制台中，有记录成文本文件，有保存到数据库中等。日志信息也许需要 分为调试日志，运行日志，异常日志等。这些虽然实现简单，但是也繁琐。本章将介绍用log4j来实现日志 记录的种种情况。 <br />5.2. 快速入门<br />1、下载log4j，http://logging.apache.org/log4j，将log4j.jar拷贝到项目的lib中， 并引用。 <br />2、建立log4j的配置文件，本文中命名为log4j.xml,内容如下： <br />例 5.1. log4j.xml<br />&lt;?xml version="1.0" encoding="UTF-8" ?><br />&lt;!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> (1)   <br />&lt;log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"><br /> &lt;appender name="file" class="org.apache.log4j.FileAppender"> (2)<br />  &lt;param name="File"   value="D:/mytest.log" />    (3)<br />  &lt;layout class="org.apache.log4j.PatternLayout">    (4)<br />   &lt;param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c:(%F:%L) %n - %m%n"/><br />  &lt;/layout>     <br /> &lt;/appender><br /> &lt;root><br />  &lt;priority value ="INFO"/>  (5)<br />  &lt;appender-ref ref="file" />  (6)<br /> &lt;/root><br />&lt;/log4j:configuration><br />   (1)  申明验证该文档的dtd文件，”SYSTEM“说明是从本地寻找，因此需将log4j.dtd文件放入申明的路径中<br /> <br />(2)  该节点配置成日志以文件形式输出（org.apache.log4j.FileAppender）。log4j还提供打印日志到控制台 （org.apache.log4j.ConsoleAppender），以信息流格式传送到任何地方（org.apache.log4j.WriterAppender）。 <br /> <br />(3)  指定日志文件的路径和名称。 <br /> <br />(4)  指定记录日志的布局格式。log4j提供以html格式的布局（org.apache.log4j.HTMLLayout），自定义布局格式 （org.apache.log4j.PatternLayout），包含一些简单的日志信息，级别和信息字符串（org.apache.log4j.SimpleLayout） 包含详细的日志信息，如时间、线程、类别等信息。 <br /> <br />(5)  设置日志输出的级别。log4j的日志常用级别如下，按优先级别从高到低分为： <br />Fatal：显示致命错误。 <br />Error：显示错误信息。 <br />Warn：显示警告信息。 <br />Info：显示程序运行日志。 <br />debug：显示调试信息。 <br />只有日志级别大于或等于被设置级别，相应的日志才被记录。如本配置文件配置级别为Info,程序中除了debug级别的日志， 其它级别的日志都会被输出。 <br /> <br />(6)  引用输出日志的方式。 <br /> <br /><br />3、演示使用log4j记录日志 <br />例 5.2. MyLog.java<br />package com.m5;<br />import org.apache.log4j.Logger;<br />import org.apache.log4j.xml.DOMConfigurator;<br />public class MyLog {<br /> public static void main(String[] args) <br /> {<br />  String log4j =  "d:\\log4j.xml" ;<br />  DOMConfigurator.configure(log4j);<br />  Logger logger = Logger.getLogger(MyLogServlet.class.getName());<br />  try<br />  {<br />   int i = 10;<br />   int n = 0 ;<br />   int m = 10/0;<br />  }<br />  catch(Exception ex)<br />  {<br />   logger.info(ex.toString());<br />  }<br /> }<br />} <br />  上面的程序会将捕捉到的异常信息写入D:/mytest.log文件。日志的书写格式输出目的地均可以通过log4j进行配置。 关于具体配置请参考log4j.xml及其说明，在此不再一一演示其效果。从上面的演示代码中可以看出对log4j的引用 也非常简洁，在实际运用中可以优化下导入log4j的配置文件部分。MyLog.java中的代码是为了最简捷清晰的说明对 log4j的使用。 <br />4、实际环境中的应用（以web服务为tomcat的web项目为例） <br />在每个类中记录日志之前都敲一次装载log4j的配置文件的代码，显然是不合理的。通常我们在程序启动之前完成这些初始化工作。 spring一文中描述了对spring配置文件的初始化方法，同样，初始化log4j配置文件的装载也可以通过这个自定义的启动类完成。 <br />例 5.3. web.xml<br />&lt;?xml version="1.0" encoding="UTF-8"?><br /> &lt;web-app xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br /> xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"><br /> &lt;display-name>Test&lt;/display-name><br /> &lt;context-param><br />  &lt;param-name>contextConfigLocation&lt;/param-name><br />  &lt;param-value>/WEB-INF/spring_bean.xml&lt;/param-value><br /> &lt;/context-param><br /> &lt;listener><br />  &lt;listener-class>org.springframework.web.context.ContextLoaderListener&lt;/listener-class><br /> &lt;/listener><br /> &lt;!--<br /> &lt;servlet><br />  &lt;servlet-name>context&lt;/servlet-name><br />  &lt;servlet-class>org.springframework.web.context.ContextLoaderServlet&lt;/servlet-class><br />  &lt;load-on-startup>2&lt;/load-on-startup><br /> &lt;/servlet><br /> --><br /> &lt;servlet><br />  &lt;servlet-name>Init&lt;/servlet-name><br />  &lt;servlet-class>com.m5.Base&lt;/servlet-class><br />  &lt;init-param><br />  &lt;param-name>log4jConfigLocation&lt;/param-name>   (1)<br />  &lt;param-value>/WEB-INF/log4j.xml&lt;/param-value><br /> &lt;/init-param><br /> &lt;load-on-startup>3&lt;/load-on-startup><br />&lt;/servlet><br />&lt;/web-app><br /> <br /> (1)  配置log4j的配置文件路径。 <br /> <br /><br />例 5.4. Base.java<br />public class Base extends HttpServlet<br />{<br /> WebApplicationContext wac = null;<br /> public void init(ServletConfig config) throws ServletException<br /> {<br />  //ApplicationContext ac = new FileSystemXmlApplicationContext("bean.xml");<br />  wac = WebApplicationContextUtils.getRequiredWebApplicationContext(config.getServletContext()); <br />  super.init(config); <br />  InitSpring.Init((AbstractApplicationContext)wac); <br />  String root = getServletConfig().getServletContext().getRealPath("/");<br />  String log4j = getInitParameter("log4jConfigLocation");  (1)<br />  DOMConfigurator.configure(root + log4j);     (2)<br /> }<br />}<br />  (1)  得到配置文件路径。 <br /> <br />(2)  装载配置文件，DOMConfigurator符合sigle模式，配置文件只需装载一次，全局即可调用。 <br /> <br /><br />通过以上配置，项目中可以通过如下引用： <br />例 5.5. MyLog.java<br />package com.m5;<br />import org.apache.log4j.Logger;<br />import org.apache.log4j.xml.DOMConfigurator;<br />public class MyLog {<br /> public static void main(String[] args) <br /> {<br />  //String log4j =  "d:\\log4j.xml" ;<br />  //DOMConfigurator.configure(log4j);<br />  Logger logger = Logger.getLogger(MyLogServlet.class.getName());<br />  try<br />  {<br />   int i = 10;<br />   int n = 2 ;<br />   int m = i/n;<br />  }<br />  catch(Exception ex)<br />  {<br />   logger.info(ex.toString());<br />  }<br /> }<br />} <br /> 规范合理的日志记录能让开发人员和维护人员事半功倍，在记录日志时还应该考虑不同的角色对日志内容可能会有 不同的需求。比如，软件正常情况下提供给用户的日志应该简洁明了，调试时提供给程序员的日志应该详细明确。 请看如下代码： <br />package com.m5;<br />import org.apache.log4j.Logger;<br />import org.apache.log4j.xml.DOMConfigurator;<br />public class MyLog {<br /> public static void main(String[] args) <br /> {<br />  String log4j =  "d:\\log4j.xml" ;<br />  DOMConfigurator.configure(log4j);<br />  Logger logger = Logger.getLogger(MyLogServlet.class.getName());<br />  try<br />  {<br />   int i = 10;<br />   int n = 2 ;<br />   int m = i/n;<br />   logger.debug("以下信息为除法器运算跟踪：");<br />   logger.warn("请注意被除数不能为0");<br />   logger.info("除数为" + Integer.toString(i));<br />   logger.info("被除数为" + Integer.toString(n));<br />   logger.info("运算结果为：" + Integer.toString(m)  );<br />  }<br />  catch(Exception ex)<br />  {<br />   logger.error(ex.toString());<br />  }<br /> }<br />}<br />  调试的时候我们可以在log4j.xml配置文中指定级别为debug,输出所有日志。正式运行时将级别设定为error,只输出 错误日志。这样就不用每次在软件正式使用前注释或者删除调试的信息了。可以想象一下，如果要注释成百上千个段调试 代码，也是项繁琐的工作，再说在正式运行的时候如果出错，想看详细信息又得修改原代码，然后再编译。特别是异地非 远程控制的情况下如果要得到详细的调试日志那是件苦不堪言的事情，因为用户不会帮你去改代码。 <br />log4j的配置文件还可以是属性文件，在此不再另述。<br />　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　（转载）
          <br/>
          <span style="color:red;">
            <a href="http://rain16881.javaeye.com/blog/147392#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 10 Dec 2007 21:11:57 +0800</pubDate>
        <link>http://rain16881.javaeye.com/blog/147392</link>
        <guid>http://rain16881.javaeye.com/blog/147392</guid>
      </item>
      <item>
        <title>Extjs中的combobox的动态加载问题</title>
        <author>rain16881</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://rain16881.javaeye.com">rain16881</a>&nbsp;
          链接：<a href="http://rain16881.javaeye.com/blog/147073" style="color:red;">http://rain16881.javaeye.com/blog/147073</a>&nbsp;
          发表时间: 2007年12月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          var RecordDef = Ext.data.Record.create([    <br />            {name: 'sn'},{name: 'groupName'}                   <br />        ]); <br />        var groupStore=new Ext.data.Store({    <br />            //设定读取的地址<br />            proxy: new Ext.data.HttpProxy({url: 'getGroupStore.action'}),    <br />            //设定读取的格式    <br />            reader: new Ext.data.JsonReader({    <br />                id:"sn",totalProperty:'totalCount',root:'groupList'<br />            }, RecordDef),    <br />            remoteSort: true   <br />        });<br />        var groupCombo=new Ext.form.ComboBox({<br />            selectOnFocus:true,<br />            valueField:'sn',<br />            hiddenName:'groupCombo',<br />            displayField:'groupName',<br />            fieldLabel: '会员权限组',<br />            blankText:'请选择权限组',<br />            emptyText:'请选择权限组',<br />            editable:false,<br />            anchor:'90%',<br />            forceSelection:true,<br />            triggerAction:'all',<br />            allowBlank:false,<br />            store:groupStore,<br />            typeAhead: true<br />        });
          <br/>
          <span style="color:red;">
            <a href="http://rain16881.javaeye.com/blog/147073#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 09 Dec 2007 17:14:03 +0800</pubDate>
        <link>http://rain16881.javaeye.com/blog/147073</link>
        <guid>http://rain16881.javaeye.com/blog/147073</guid>
      </item>
      <item>
        <title>spring,hibernate中,blob数据的打包下载如果实现</title>
        <author>rain16881</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://rain16881.javaeye.com">rain16881</a>&nbsp;
          链接：<a href="http://rain16881.javaeye.com/blog/141541" style="color:red;">http://rain16881.javaeye.com/blog/141541</a>&nbsp;
          发表时间: 2007年11月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          本人遇到以下问题:<br />现在我可以上传大文件到服务器中,用的是blob,一个个下载是个可以,<br /><br />但现在我想把我想要的blob数据打包下载,<br /><br />请问要怎样做啊?
          <br/>
          <span style="color:red;">
            <a href="http://rain16881.javaeye.com/blog/141541#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 18 Nov 2007 18:48:13 +0800</pubDate>
        <link>http://rain16881.javaeye.com/blog/141541</link>
        <guid>http://rain16881.javaeye.com/blog/141541</guid>
      </item>
      <item>
        <title>急:加载不了js文件怎么办.</title>
        <author>rain16881</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://rain16881.javaeye.com">rain16881</a>&nbsp;
          链接：<a href="http://rain16881.javaeye.com/blog/86264" style="color:red;">http://rain16881.javaeye.com/blog/86264</a>&nbsp;
          发表时间: 2007年06月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          DEBUG:  no tag handler registed for type:  dojo:validationtextbox<br />DEBUG:  no tag handler registed for type:  dojo:dropdowndatepicker<br /><br />大家都知后边那个两是widget的组件吧.<br /><br />就是用不了..<br /><br />我也是看DOME去改在我的页面那的..<br /><br />就是用不了..<br /><br />我看了DOME ..<br /><br />它那也没加载什么其它JS文件的<br /><br />当然..这两个组件的JS文件我是有用dojo.require加进来的啦.<br /><br />啊.<br /><br />请指教
          <br/>
          <span style="color:red;">
            <a href="http://rain16881.javaeye.com/blog/86264#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 03 Jun 2007 10:10:59 +0800</pubDate>
        <link>http://rain16881.javaeye.com/blog/86264</link>
        <guid>http://rain16881.javaeye.com/blog/86264</guid>
      </item>
  </channel>
</rss>