2007-07-27

初学hibernate笔记... - [程序人生]

    在IT业走过了一年半的风风雨雨,项目没有做得多少,但自己学了些开源的框架。
    比如:Struts/Ibatis/webwork/Jfreechar/Freemarker/velocity/hibernate等等。
    最开始从WEB层开始学Struts,刚到公司的时候感觉学习框架是多少难或是多少深层的东西,但是后来学了Struts才知道,Struts是这么简单的,然后就拼命的学持久层。
    人家说持久层hibernate好,但是我选择了Ibatis,因为Ibatis是由XML来封装SQL的,感觉这样看起来直观,而且容易找到SQL对应DAO层的方法,所以我花了半个月研究了Ibatis,感觉和我想像的一样,并且我一直到现在都用Ibatis当持久层,而且和Struts一起开发项目,写接口,然后写抽象类,写DAO层,配置SQLMAP,一般我会把SQLMAP的SQL的方法名和DAO的方法名相同,然后写ACTION,再实现业务,通过Struts标签显示。
    在用Struts不爽之处,就是forword之后,界面的CSS和在DW里编辑的界面是不一样的,因为DW里是以相对目录,而Struts-forword之后在工程目录的ACTION下面,这使得如果在满足Struts显示就在DW里出现界面没有CSS,如果满足DW,那么forword之后的界面可想而知,这个让我大所失望的。
    后来学习了Webwork,而Webwork的名词空间恰好弥补了这一个问题,并且webwork的配置更加直观,在用了webwork之后我真的感觉到不想再用struts了,在标签上webwork是多样化的,功能全面。所以我后来一直用webwork代替了Struts,后来的Struts2.0里也整合了webwork,我没有用过,不知道效果如何。
    说了这么多,我感觉现在学的hibernate与Ibatis比较还是有差别的,现在感觉只要有一本开源框架的书,三天就可以学会用一个框架,并且用得顺手,学hibernate也一样。
    但是在学习中你一定会遇到太多的问题,但是我们需要耐心并细心的对待它。
    我在学习hibernate中,有几个问题研究了好久:
    主要对ID属性的配置一般<generator class="native" />就OK了。
    再一个在插入数据中我希望返回一个Obj对象,就像用户注册成功之后直接登录,无需用户再登录。所以我这样写:
public Object insert(Object obj) {
  beginTransaction();
  obj = (Levaeword) session.save((User)obj);
  session.flush();
  endTransaction(true);
  return obj;
 }

你猜这样会出现什么结果,插入数据老半天,数据库里一看没有数据,一开始以为是session没有加载,但后来测试中session为空,然后再尝试别的方法,用日志软件SQL语句等,搞了半天没找不到原因,到晚上才发现obj = (Levaeword) session.save((User)obj);有问题,但是以一个程序员来说,这句语句是不可能有错的,我也一直研究了半天,查看了session的源码,还是找不出,然后就把obj=(Leaveword)去掉就OK了,这个时候我真叫狂晕,狂狂晕。。。这个问题终于解决了,总结有的时候不要多此一举。
    还有一个就是HQL出现中文乱码问题,只要在hibernate配置文件里加个:
<property name="hibernate.query.factory_class">
org.hibernate.hql.classic.ClassicQueryTranslatorFactory
</property>

就OK了。
     最后总结一点,学习新的东西要细心,并且更要有耐心,慢慢去尝试,一点点的去测试,到最后你就会发现很多细节的东西,这样以后会让你留心这些细节。





评论

    发表评论

     姓名:
     E-mail:
     地址: