在拜读了很多大作之后,
终于在spring下基本会使用hibernate。
另外,发个感叹:
在中国的论坛上活跃着一批,也许是一大批,所谓的高手与专家。
印象比较深刻的是javaeye。
有个帖子,回帖人不去回答问题,而是去批评发贴人,
比如:你不会先google啊,你提问不能怎样怎样啊。
当我从网上的链接一个个链接过去的时候,看到这些自以为事的人,我真的想砍人。
我想,他们在论坛上存在的意义不是与其他人交流,而是以一种高高再上的姿态对待一大批有求者。
反关国外的论坛,发贴人都很积极讨论问题,以问题讨论,知识交流为主。
这,难道又是国内学术氛围不如国外的一个例子。
正题:
我主要想做的事情是:利用spring对hibernate的支持,以dao方式与db交互。
主要用到HibernateDaoSupport和HibernateTemplate。
根据文档的论述,HibernateTemplate和HibernateDaoSupport帮助客户代码完成税代码,用户不用操心session,transaction的问题,比如像db写数据,直接是
getHibernateTemplate().save(transientInstance);
具体原理见:
http://blog.youkuaiyun.com/yethyeth/archive/2007/05/31/1633297.aspx
http://blog.youkuaiyun.com/yethyeth/archive/2007/05/30/1630292.aspx
最后,得到的代码是这样的:(DAO方式)




























.......
问题是
getHibernateTemplate().get之类能很好工作。
但是getHibernateTemplate().save不能工作,即数据不能保存到db。
原因似乎因为在默认情况下,没有使用transaction,而保存数据要使用transaction(why)。
因此,解决的方式就是加入事务的控制,但是又不想以代码的形式,而是利用spring提供 的配置方案来控制。
这个配置就涉及到spring的事务控制部分(spring又两种事务控制方式:声明式(配置文件),编程式)。
配置文件是我的第一个问题。
1带事务管理的配置文件
下面是我的一个配置applicationContext.xml:
该文件的详细解释见http://blog.youkuaiyun.com/yethyeth/archive/2007/06/06/1641176.aspx
另,上面给出的连接有个图精辟地阐述了IoC和非Ioc的对比。












































































注意黑体部分,包括
数据库连接信息和
sessionFactory
两部分(主要是sessionFactory,数据库连接信息datasource是sessionFactory的一个属性)
因为最初没有这样设置,而犯了很大的错误。
我使用myecilpse,在利用myeclipse的spring的功能部分的时候,自动生成了一个applicationContext.xml版本,
其中黑体部分对应为:






因为,我先加入了hibernate。
按照我的理解这里从applicationContext.xml连接到了hibernate.cfg.xml,而hibernate.cfg.xml中配置了数据库连接信息,如下:


























因此,当出现问题,不能保存数据到db的时候,我没有想到是这里的问题。
虽然现在改了过来,但是还是不清楚为什么?
第二个问题是DAO模式的使用
2 正确且在spring下合理使用DAO
正确指dao模式要符合公认的方式,
合理指在spring下使用的时候有些附加的特性。
用两个图来表示我前后两种使用方式。
错误的方式:

改后:

(未完)