一 前言
最近在做个项目,JPA使用了hibernate3.6.后来觉得JPA单独使用不是很给力,于是就想到了和spring集成.刚开始,我是用spring2.5.6和hibernate3.6集成的,屡次不成功.后来研究发现,hibernate3.6的JPA是2.0的.狂晕.下面是spring3.0.5(支持JPA2.0)和hibernate3.6集成,其中源代码在附件里, 只有spring3.0.5的官方标准包,需要大家自己下载了,然后添加到WEB-INF/lib下,因为附件大小限制在了10M,所以除spring3.0.5官方包外其他所有的包以及数据库的SQL语句,都在本例中,若有需要,可以留言.
二 实验环境及公共环境配置
1.准备工具
eclipse3.6.1_javaee
jdk1.6.0.23
tomcat6.0.30
mysql5.1.54
包
1)mysql
mysql-connector-java-5.1.14-bin.jar
2)log4j
log4j-1.2.16.jar
3)spring3.0.5
org.springframework.aop-3.0.5.RELEASE.jar
org.springframework.asm-3.0.5.RELEASE.jar
org.springframework.beans-3.0.5.RELEASE.jar
org.springframework.context-3.0.5.RELEASE.jar
org.springframework.core-3.0.5.RELEASE.jar
org.springframework.expression-3.0.5.RELEASE.jar
org.springframework.jdbc-3.0.5.RELEASE.jar
org.springframework.orm-3.0.5.RELEASE.jar
org.springframework.transaction-3.0.5.RELEASE.jar
org.springframework.web-3.0.5.RELEASE.jar
自己下载的spring相关包,AOP时候用的
aopalliance.jar
aspectjrt.jar
aspectjweaver.jar
cglib-nodep-2.2.jar
commons-logging-1.1.1.jar
4)hibernate3.6
antlr-2.7.6.jar
commons-collections-3.2.1.jar
dom4j-1.6.1.jar
hibernate-jpa-2.0-api-1.0.0.Final.jar
hibernate3.jar
javassist.jar
jta-1.1.jar
slf4j-api-1.6.1.jar
slf4j-log4j12-1.6.1.jar
2.tomcat数据源
文件位置:WebContent/META-INF/context.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource
name="jdbc/test"
type="javax.sql.DataSource"
username="root"
password="147258369"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.l:3306/test?autoReconnect=true"
initialSize="1"
maxActive="5"
minIdle="1"
maxIdle="5"
validationQuery="select count(*) from dual"
testOnBorrow="true"
testOnReturnw="true"
testWhileIdlew="true"
minEvictableIdleTimeMillis="1800000"
timeBetweenEvictionRunsMillis="300000"
maxWait="1000"
removeAbandoned="true"
removeAbandonedTimeout="180"
/>
</Context>
3.log4j配置
文件位置:src/log4j.properties
log4j.rootLogger=DEBUG,appender1
# org.springframework包下面所有的日志输出的级别设为INFO
log4j.logger.org.springframework=INFO
# 控制台输出
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
log4j.appender.appender1.layout=org.apache.log4j.PatternLayout
log4j.appender.appender1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss:SSS}[%p]: %m%n
# 立即输出
log4j.appender.appender1.immediateFlush=true
三 搭建hibernate3.6(JPA)环境
利用MySQL5.1.54的test库,前提是test库的编码要是UTF8
test有3个字段
id,name,age
src/META-INF/persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="sh" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<non-jta-data-source>java:comp/env/jdbc/test</non-jta-data-source>
<class>com.phl.entity.User</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
<property name="hibernate.connection.autocommit" value="true" />
</properties>
</persistence-unit>
</persistence>
四 搭建spring3.0.5环境
1.web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>sh</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- log4j 必须要在最前面 -->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:log4j.properties</param-value>
</context-param>
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>60000</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>webApp.root</param-value>
</context-param>
<!-- Spring初始化 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
2.applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<bean id="user" class="com.phl.entity.manager.UserImpl" />
</beans>
五 搭建hibernate3.6与spring3.0.5集成环境
1.applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<bean id="user" class="com.phl.entity.manager.UserImpl" />
<bean id="myEmf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<!-- 此种方式不推荐,对jpa的侵入性太强,除非数据库连接池也在spring中配置 <property name="dataSource" ref="dataSource" /> -->
<property name="persistenceUnitName" value="sh" />
</bean>
<!-- 自动装载EntityManager -->
<context:annotation-config />
<!-- 配置事务管理器 -->
<bean id="myTxManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="myEmf" />
</bean>
<!-- 配置切面 -->
<aop:config>
<aop:pointcut expression="execution(* com.phl.entity.manager.*.*(..))" id="myTx1"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="myTx1"/>
</aop:config>
<!-- 配制具体方法及事务参数 -->
<tx:advice id="txAdvice" transaction-manager="myTxManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
<!--
事务传播行为类型
REQUIRED
如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。
SUPPORTS
支持当前事务,如果当前没有事务,就以非事务方式执行。
MANDATORY
使用当前的事务,如果当前没有事务,就抛出异常。
REQUIRES_NEW
新建事务,如果当前存在事务,把当前事务挂起。
NOT_SUPPORTED
以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
NEVER
以非事务方式执行,如果当前存在事务,则抛出异常。
NESTED
如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。
-->
</beans>
六 总结
集成的过程看着很乱,其实很简单,初始化环境是首先要配置好log4j和tomcat数据源,如果没有特殊要求,我们一般配在工程下面context,而不是tomcat的全局数据源
1。首先可以独立使用hibernate3.6
2。可以独立使用spring3.0.5
3。可以由spring管理hibernate3.6的EntityManager:好处是不用关闭EntityManager,获得像在ejb3下面使用JPA一样的快感
4。可以由spring来管理事务:好处是不用每提提交事务,由spring帮助完成提交
最后祝大家开发愉快,如果有任何问题,都可以留言,我会第一时间给大家解答.本文也并不是什么高端的文章,只是给自己当个笔记记录下来.如有不当之处,请各位同仁理解.
版权所有-转载请说明出处.
补充:
1.spring3.0.5的下载地址
http://s3.amazonaws.com/dist.springframework.org/release/SPR/spring-framework-3.0.5.RELEASE-with-docs.zip
2.若干别错字进行了修正
3.标题改了一下,因为只是与jpa2.0集成,没有用到hibernate的专用接口
4.精简spring3.0.5包,同时附件上传必须的spring3.0.5包
分享到:
相关推荐
CXF2.7+SPRING3.0.5+HIBERNATE3.6final+STRUTS2的所有jar包完全配好了,并已经成功项目中应用,使用者只需将文件解压拷到项目的lib文件夹下即可
搭建zkoss CE6.0+spring3.0.5+hibernate3.6+oracle10g+mysql5框架最全包,下载就收益,省的再去别的地方找。需要的就赶紧下载吧。。
struts2.2.1+_hibernate3.6+spring3.0.5配置说明
ssh(struts2.2.1+_hibernate3.6+spring3.0.5)整合配置,比较新的一个文档,可以参考。
经典SSH组合(struts2.2.3+ hibernate3.6+spring3.0.5),已经在项目中成功,完全不会有兼容问题,非常适合初学者
ssh(struts2[1].2.1+_hibernate3.6+spring3.0.5)整合配置.doc
MyEclipse7.5+flex4+spring3.0.5+struts2.2.1+hibernate3.6.0+blazeds4.0.0.14931完美整合方案 内附所需jar包和源代码
使用Struts2.2.3+Spring3.0.5+JPA2.0框架案例。 包含包。使用eclipse导入,直接可以运行。编码使用GBK。 出现乱码的话,把默认编码改为GBK就OK了。
包含spring 3.0.5的所有jar文件: org.springframework.aop-3.0.5.RELEASE.jar org.springframework.asm-3.0.5.RELEASE.jar org.springframework.aspects-3.0.5.RELEASE.jar org.springframework.beans-3.0.5.RELEASE...
Spring3.0.5帮助文档 Spring3.0.5帮助文档 Spring3.0.5帮助文档
mybatis3.0.3 and spring3.0.5jar
Spring3.0.5及其依赖包,包括: spring-framework-3.0.5.RELEASE.zip spring-framework-3.0.5.RELEASE-dependencies.rar
将spring2的开发包spring.jar替换为附件中压缩文件的所有jar包,既可以将spring2.0的应用升级到spring3.0.5
spring3.0.5的所以jar包
Spring3.0.5所有jar包,并包含对每个jar包作用进行了详细描述的文档。共有20个jar文件和一个说明文档。
好东西要大家一起分享,这个绝对是最新的,最好的!
struts2(2.21)+spring(3.0.5)+hibernate(3)jar(超全) struts2(2.21)+spring(3.0.5)+hibernate(3)jar(超全) struts2(2.21)+spring(3.0.5)+hibernate(3)jar(超全) struts2(2.21)+spring(3.0.5)+hibernate(3)jar(超全)
Spring3.0.5源码以及对应的lib包。亲测可用!
Struts2 2.1.8 + Spring 3.0.5 + Hibernate 3.6.0 + JPA2的jar包整合到一起了 里面还有JSON的jar包,是SS2H+JPA的学习必备. 这里面都是jar包,如果想查看web.xml,struts.xml,application.xml,persistense.xml的写法,...