当前位置:文档之家› struts2+spring3+hibernate整合教程

struts2+spring3+hibernate整合教程

Struts2+Spring3+hibernate3整合(2011年7月末,最新)上次下载了一个教程,上面写着:“献给我亲爱的老婆!”(羡慕不已)。

想了想,我没老婆,难道没什么好写了!不难…献给我暗恋过的每一个女人!(嘿嘿…)如果在你遇到的女生中有一个幽默豁达的女生,不要犹豫,追上去,就娶她了!一,需要的框架包二,建立project,添加相应的.jar文件(重点)1,eclipse中建立dynamic web project,这里是ssh_integrate_0100。

2,src中创建需要的类,这里以一个域模型为user的例子说明。

(现在建立这些类,可以方便我们在搭建时候随时测试!)User.javaIUserDao.javaUserDaoImpl.javaIUserService.javaUserServiceImpl.java3,拷贝spring-framework-3.1.0\dist目录下的所有jar包,注意有一个不是jar的文件,当然拷过去也没事。

4,拷贝spring运行中需要的其他jar文件,主要是mons-logging,可以从spring-framework-3.0.2.RELEASE-dependencies中找到。

ii.Aspectjrt.jar和aspect-waver.jar,可以从spring-framework-2.5.6-with-dependencies/lib/aspectj下面找到(不知道为什么,spring-framework-3.0.2.RELEASE-dependencies中没有aspectjrt的jar包)iii.aopalliance.Jar,apache-dbcp.jar,apache-pool.jar,可以从spring-framework-3.0.2.RELEASE-dependencies中找到。

5,建立beans.xml,这里使用的是annotation和component-scan,这样配置可以大大简化配置,所以是best-practice,其他配置请参考spring文档。

6,建立JUnit测试环境新建一个source folder->test,右击新建一个JUnit Test Case,包名是er,选择测试类为UserServiceImpl 。

UserServiceTest.java7,运行这个测试,我这里可以通过,如果你那里有问题,不要着急,认真看测试报的错误,如果错误很陌生,第一件要想到的就是:可能少添加包。

看看depends或者去网上搜,应该不难了。

这里贴出所有的包名:8,整合hibernate,这个是比较难整合的,一定要细心,多参考文档,多搜索。

i.添加hibernate的jar包包括三个部分,第一部分,hibernate所需要的基本包。

有hibernate-distribution-3.6.4.Final中的hibernate3.jar,lib\requery目录里面的所有jar,lib\jpa中的jar。

第二部分,annotation需要的jar。

有hibernate-annotations-3.4.0.GA下面的hibernate-annotation.jar,lib目录下的,ejb3,hibernate-common-annotation和slf4j-api。

第三部分是log4j日志需要的包。

apache-log4j-1.2.16下的log4j,slf4j-1.6.1下面的slf4j-log4j12-1.6.1.jar。

(总共13个包,一会会给截图)ii.配置beans.xml,配置太长了,只好直接贴这里了。

<?xml version="1.0"encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:tx="/schema/tx"xmlns:aop="/schema/aop"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-3.0.xsd/schema/aop/schema/aop/spring-aop-3.0.xsd/schema/tx/schema/tx/spring-tx-3.0.xsd/schema/context/schema/context/spring-context-3.0.xs d"><context:annotation-config/><context:spring-configured/><context:component-scanbase-package="er"></context:component-scan><context:component-scan base-package="sys"></context:component-scan> <aop:aspectj-autoproxy/><tx:annotation-driven/><!-- Enable Declare Transaction Manager --><context:property-placeholder location="db.properties"/><bean id="dataSource"class="mons.dbcp.BasicDataSource" destroy-method="close"><property name="driverClassName"value="${jdbc.driverClassName}"/> <property name="url"value="${jdbc.url}"/><property name="username"value="${ername}"/><property name="password"value="${jdbc.password}"/></bean><!-- that is hibernate Transaction Manager define--><bean id="sessionFactory"class="org.springframework.orm.hibernate3.annotation.AnnotationSessio nFactoryBean"><property name="dataSource"ref="dataSource"/><property name="annotatedClasses"><list><value>er</value></list></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><prop key="hibernate.show_sql">true</prop></props></property></bean><bean id="txManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory"ref="sessionFactory"/></bean></beans>iii.修改User,在class上加上@Entity(name=”_user”),在getId()上加上@Id和@GeneratedValue标签。

iv.启动mysql数据库,创建hibernate数据库,创建_user表,Create database hibernate;Create table _user(id int primary key auto_incement,namevarchar(50),password varchar(50));v.修改UserDaoImpl.java,vi.运行UserServiceTest测试,我的报了个错,这个是最纠结的,我弄了半天,我是这样排查的,把lib里所有的包全删了,然后加上我以前建立的UserLibrary->spring3.1和hibernate,运行发现没有错(代码和配置没有错)。

删除spring3.1的user library加上准备好的spring_jar,运行发现没错。

相反,删除hibernate的user library加上准备好的hibernate_jar,运行发现出错了,这说明是hibernate的包没有添加正确。

我删除了所有的hibernate的包重新和user library比对,再添加还出错,后来发现时少了一个包:hibernate-core,但是为什么user library里面没有就能正常运行,而放到lib\目录下就出问题,真是弄不明白了??高手指点啊,少包:hibernate-coreorg.springframework.beans.factory.BeanCreationException: Error creating beanwith name 'userDao': Injection of resource dependencies failed; nestedexception is org.springframework.beans.factory.BeanCreationException: Errorcreating bean with name 'sessionFactory' defined in class path resource[beans.xml]: Invocation of init method failed; nested exception isorg.springframework.beans.BeanInstantiationException: Could not instantiatebean class [org.hibernate.cfg.AnnotationConfiguration]: Constructor threwexception; nested exception is ng.NoSuchFieldError: INSTANCE9,整合strutsi.拷贝jar包解压struts-2.2.3\apps目录下的blank.war,拷贝class\lib下面的所有jar文件,还有、struts\lib目录下的struts-spring-plugin.jar,注意有一个文件是重复的,javassist去除,再运行一遍上面的测试,没有问题则继续。

相关主题