Hibernate和Struts2的整合(相关问题的说明)

来源:互联网 发布:ubuntu chmod 编辑:程序博客网 时间:2024/06/05 01:16

这篇文章就Hibernate和Struts2整合中的相关问题进行详细说明,但是不对整合的过程进行累述。

如果想了解详细过程,请参考这些文章:

Struts 2 + Hibernate Integration Example

Struts 2 + Hibernate Integration With “Full Hibernate Plugin”

笔者是参考这两篇文章进行操作的,文章对操作的过程叙述很详细,此外,在DZone上也有类似的文章:

Struts2 Hibernate Integration Tutorial(中文翻译版)

Struts2 CRDU Tutorial(中文翻译版)

DZone上面这篇文章和上面的文章内容差不多,也是采用了Full Hibernate Plugin插件Hibernate和Struts2的集成,将Hibernate的Session和Trasaction注入到DOA对象中,然后进行数据库的相关操作。


总的来说,集成的方法就两种:

方法一:在Struts2中没有官方的用来和Hibernate框架集成的插件。但是我们可以采用如下的步骤进行:

1. 注册一个自定义的ServletContextListener。

2. 在自定义的ServletContextListener类中,初始化Hibernate的Session并将其存储在ServletContext中。

3. 在Action类中,通过ServletContext获得Hibernate的Session然后进行Hibernate的数据库操作任务。

整个过程可以用如下图表示:

Struts 2 <-- (Servlet Context) ---> Hibernate <-----> Database
这个方法参考Struts 2 + Hibernate Integration Example文章。

方法二:官方虽然没有集成的插件,但是高手在民间。有一个叫做Full Hibernate plugin的插件(点击下载)可以帮助我们很好的完成任务。

具体步骤如下:

1. 将Full Hibernate Plugin的jar包添加到工程路径中。

2. 使用@SessionTarget将Hibernate的Session注入到你的DAO类中,使用@TransactionTarget将Hibernate的Trasaction注入到你的DAO类中。

3. 在struts.xml中将package的extends属性的值由原来的struts-default改为hibernate-default。

图示如下:

Struts 2 <-- (Full Hibernate Plugin) ---> Hibernate <-----> Database
然后你就可以不用关心的Session和Trasaction的创建,已经SessionFactory的销毁等等,只用专注于你的业务逻辑就好了。


但是理想是丰满的,现实是骨干的。下面我说说我使用使遇到的问题。

首先说第二种方法,第二种利用Full Hibernate plugin,确实是很好的。但是你进入Full Hibernate plugin的主页会发现这个插件是2010最后一次更新的,亲,现在都2015年了。所以你的Hibernate和Struts要能和Full Hibernate plugin协同工作,Hibernate必须是3.x, 要不然会各种报错,Hibernate这么低的版本,有时候又会对高版本的数据库不支持。所以我在这种方案里挣扎了好久最后放弃了,决定用第二种方案。


方案一不用插件,自己写这样的话功能都能实现。但是有一些不好的地方就是你必须没有都要手动创建Session和手动提交。最后我用第一种方案实验成功。


希望说的不对的地方,请指出,初次使用Hibernate和Struts2。

0 0