- 浏览: 162204 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (134)
- JAVA Collection,Map (6)
- JAVA IO (6)
- JAVA 线程 (12)
- JAVA 反射机制 (6)
- JSP (2)
- JAVASCRIPT (6)
- JAVA OOP (4)
- Struts (4)
- Hibernate (5)
- Spring (9)
- IBatis (8)
- HTML (1)
- CSS (1)
- ORACLE (1)
- Servlet (4)
- DATABASE (5)
- JAVA逻辑 (1)
- JVM学习 (8)
- 设计模式 (13)
- JDBC (1)
- JAVA XML (6)
- Jquery (4)
- IT生活 (2)
- JAVA Web Servece (2)
- EJB (2)
- C语言基础 (3)
- JAVA数据结构和算法 (4)
- C数据结构和算法 (0)
- JAVA Collection (5)
- Map (5)
- Inner Class (1)
- JVM (0)
- tomcat (0)
- 版本控制 (1)
最新评论
-
baukh789:
...我们公司最近也在推这个东西,SVN用了四五年了,猛的换一 ...
git 初使用 -
BuN_Ny:
时序图???????????????????
EA入门-4 -
308202251:
308202251 写道308202251 写道3082022 ...
Java 反射机制中 getMethod()和getDeclaredField()区别 -
308202251:
308202251 写道308202251 写道3082022 ...
Java 反射机制中 getMethod()和getDeclaredField()区别 -
308202251:
308202251 写道308202251 写道3082022 ...
Java 反射机制中 getMethod()和getDeclaredField()区别
一 前言
最近在做个项目,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.aspects-3.0.5.RELEASE.jar
org.springframework.beans-3.0.5.RELEASE.jar
org.springframework.context-3.0.5.RELEASE.jar
org.springframework.context.support-3.0.5.RELEASE.jar
org.springframework.core-3.0.5.RELEASE.jar
org.springframework.expression-3.0.5.RELEASE.jar
org.springframework.instrument-3.0.5.RELEASE.jar
org.springframework.instrument.tomcat-3.0.5.RELEASE.jar
org.springframework.jdbc-3.0.5.RELEASE.jar
org.springframework.jms-3.0.5.RELEASE.jar
org.springframework.orm-3.0.5.RELEASE.jar
org.springframework.oxm-3.0.5.RELEASE.jar
org.springframework.spring-library-3.0.5.RELEASE.libd
org.springframework.test-3.0.5.RELEASE.jar
org.springframework.transaction-3.0.5.RELEASE.jar
org.springframework.web-3.0.5.RELEASE.jar
org.springframework.web.portlet-3.0.5.RELEASE.jar
org.springframework.web.servlet-3.0.5.RELEASE.jar
org.springframework.web.struts-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)hibernate
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 >
<?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包下面所有的日志输出的级别设为DEBUG
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 >
<?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 >
<?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 >
<?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 >
<?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
4。可以由spring来管理事务:好处是不用每提提交事务,由spring帮助完成提交
最后祝大家开发愉快,如果有任何问题,都可以留言,我会第一时间给大家解答.本文也并不是什么高端的文章,只是给自己当个笔记记录下来.如有不当之处,请各位同仁理解.
发表评论
-
Spring中常用的持久层参考代码
2012-01-13 02:10 1580public interface BaseDAO { ... -
Spring JDBC笔记
2011-11-04 11:19 616Table 12.1. Spring JDBC - wh ... -
Spring管理filter和servlet
2011-10-20 16:57 878在使用spring容器的web应用中,业务对象间的依赖关系都可 ... -
一分钟掌握Spring中bean的生命周期!
2011-09-22 15:06 720Spring 中bean 的生命周期短暂吗? 在spring ... -
Lookup方法注入
2011-09-21 15:30 823Lookup方法注射指容器能够重写容器中bean的抽象或具体方 ... -
BeanFactoryAware
2011-09-21 13:44 1841对于大部分的用户来说 ... -
使用Spring MVC表单标签
2011-04-13 14:15 1707在低版本的Spring中,你 ... -
Spring Security 2 配置精讲
2011-01-17 16:08 974论坛上看了不少Spring Security的相关文章。这些文 ...
相关推荐
标题中的"CXF2.7+SPRING3.0.5+HIBERNATE3.6final+STRUTS2"代表了一个集成开发环境,其中包含了四个关键的技术框架:Apache CXF 2.7、Spring 3.0.5、Hibernate 3.6 Final以及Struts2。这些框架在Java Web开发中起着...
本篇将详细讲解如何将Spring 3.0.5与JPA 2.0(基于Hibernate 3.6)进行集成,以构建高效、灵活的应用程序。 首先,让我们了解Spring 3.0.5的核心特性。Spring 3.0引入了若干改进和新特性,包括对JSR-303(Bean ...
下面将详细介绍如何整合Struts2.2.1、Hibernate3.6和Spring3.0.5。 首先,确保准备好所有必要的库文件,包括: 1. Struts2的struts2-2.2.1-all.zip 2. Hibernate的hibernate-distribution-3.6.0.Final-dist.zip 3. ...
在这个项目中,使用的是Struts2.2.3、Hibernate3.6和Spring3.0.5的版本,这是一套相对稳定的配置,已经在实际项目中得到了验证,不存在兼容性问题,对于初学者来说是学习和实践的良好平台。 **Struts2** 是一个基于...
在本文中,我们将详细介绍如何手动配置SSH(Struts2 2.2.1、Hibernate 3.6和Spring 3.0.5)的整合。 首先,你需要准备好以下软件和库: 1. Struts2的最新版本,这里是Struts2 2.2.1,对应的压缩包为`struts2-2.2.1...
5. **数据访问增强**:Spring 3.0对数据访问层进行了改进,增加了对JPA 2.0、Hibernate 3.6等ORM框架的支持,并且提供了统一的JDBC抽象层,简化了数据访问操作。 6. **Spring Expression Language (SpEL)**:Spring...
【WEB最新架构设计开发文档】主要探讨了在现代WEB开发中的架构设计,特别是Spring 3.0.5与JPA 2.0(基于Hibernate 3.6)的集成。以下将详细介绍相关知识点: 1. **Spring 3.0.5与JPA 2.0的集成** - Spring框架是一...
SSH2_Ajax是一个基于最新版本的Struts2.2.1.1、Spring3.0.5和Hibernate3.6的整合项目,旨在提供一个可发布的WAR包和Eclipse工程模板,便于开发者快速构建Web应用。这个项目的核心是将这三大流行框架(Struts2、...
SSH+Frameset是一种常见的Web应用开发框架组合,主要包括Spring、Hibernate和Struts2,用于构建高效、可维护的企业级应用程序。在这个实例中,我们将探讨如何将这三个框架与Frameset技术结合,实现一个简单的权限...