在2struts-spring.txt基础上进行集成hibernate.
前话:集成hibernate4可以使用org.springframework.orm.hibernate4.LocalSessionFactoryBean,但这个类是从spring3.1开始的,所以要先修正spring的版本
使用hinernate4.3以上的版本也会有bug,提示缺少方法.还是版本兼容性问题,此集成是使用struts2.3.16+spring3.2.4+hibernate4.2.8
1.添加依赖:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<struts.version>2.3.16</struts.version>
<spring.version>3.2.4.RELEASE</spring.version>
<hibernate.version>4.2.8.Final</hibernate.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>${struts.version}</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>${struts.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.26</version>
</dependency>
</dependencies>
2.添加数据源,注册sessionFactory bean,并将事务交给spring管理
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/ssh2?useUnicode=true&characterEncoding=UTF-8" />
<property name="user" value="root" />
<property name="password" value="123456" />
<!-- 初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
<property name="initialPoolSize" value="1" />
<!-- 连接池中保留的最小连接数。 -->
<property name="minPoolSize" value="1" />
<!-- 连接池中保留的最大连接数。Default: 15 -->
<property name="maxPoolSize" value="300" />
<!-- 最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
<property name="maxIdleTime" value="60" />
<!-- 当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
<property name="acquireIncrement" value="5" />
<!-- 每60秒检查所有连接池中的空闲连接。Default: 0 -->
<property name="idleConnectionTestPeriod" value="60" />
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="com.test.domain"/>
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.hbm2ddl.auto=update
hibernate.show_sql=true
hibernate.format_sql=true
</value>
</property>
</bean>
<!-- 先注册一个事务管理器,这样才能将事务交给spring来管理,要结合基于注解或XML方式配置,这个事务管理器才有作用 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- 对带有@Tansactional注解的方法,进行事务处理. 没有这项,@Tansactional是没用的 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
NOTE:
对于windows下载的免安装mysql5.5.28,org.hibernate.dialect.MySQLInnoDBDialect 是不会自动生成表的,也就是用这个方言是不对的.
spring事务可参考我的百度网盘>video>传智播客_spring2.5视频
对于一个含有两个sql语句的方法,没有加上@Tansactional,那么两个sql语句是各自独立在自己的事务进行,而不是在一个事务进行.
在类上进行@Tansactional注解的意思:是否由spring来管理这个bean的事务
没有在方法上进行@Tansactional注解,执行sql语句后,如果抛出RuntimeException是会进行事务回滚的, 如果抛出Exception是不会进行事务回滚的.
A.在方法上进行@Tansactional(rollbackFor=Exception.class)表示即使是Exception也会进行事务回滚.
B.在方法上进行@Tansactional(noRollbackFor=RuntimeException.class)表示即使是RuntimeException也不会进行事务回滚.
综合以上两点,说明方法上进行@Tansactional使用rollbackFor和rollbackFor可以改变spring默认的事务管理.
在类上进行了@Tansactional注解,而没有在方法上进行@Tansactional注解,默认是开启事务的.有些方法是不需要事务,想关闭可以在方法上使用@Tansactional(propagation=Propagation.NOT_SUPPORT)propagation的默认值是REQUIRED
事务传播属性
REQUIRED:业务方法需要在一个事务中运行。如果方法运行时,已经处在一个事务中,那么加入到该事务,否则为自己创建一个新的事务。
NOT_SUPPORTED:声明方法不需要事务。如果方法没有关联到一个事务,容器不会为它开启事务。如果方法在一个事务中被调用,该事务会被挂起,在方法调用结束后,原先的事务便会恢复执行。
REQUIRESNEW:属性表明不管是否存在事务,业务方法总会为自己发起一个新的事务。如果方法已经运行在一个事务中,则原有事务会被挂起,新的事务会被创建,直到方法执行结束,新事务才算结束,原先的事务才会恢复执行。
MANDATORY:该属性指定业务方法只能在一个已经存在的事务中执行,业务方法不能发起自己的事务。如果业务方法在没有事务的环境下调用,容器就会抛出例外。
SUPPORTS:这一事务属性表明,如果业务方法在某个事务范围内被调用,则方法成为该事务的一部分。如果业务方法在事务范围外被调用,则方法在没有事务的环境下执行。
NEVER:指定业务方法绝对不能在事务范围内执行。如果业务方法在某个事务中执行,容器会抛出例外,只有业务方法没有关联到任何事务,才能正常执行。
NESTED:如果一个活动的事务存在,则运行在一个嵌套的事务中. 如果没有活动事务, 则按REQUIRED属性执行.它使用了一个单独的事务, 这个事务拥有多个可以回滚的保存点。内部事务的回滚不会对外部事务造成影响。它只对DataSourceTransactionManager事务管理器起效
设为只读事务也可以提高效率.
3.编写domain,Service层.部署测试,查看是否自动生成表,是否能保存实体
没有合适的资源?快使用搜索试试~ 我知道了~
struts2-spring3-hinernate4
共17个文件
java:6个
xml:5个
txt:3个
5星 · 超过95%的资源 需积分: 6 12 下载量 78 浏览量
2014-02-19
18:21:36
上传
评论 1
收藏 15KB ZIP 举报
温馨提示
ssh集成,详细请看http://blog.csdn.net/xiejx618/article/details/19498019
资源推荐
资源详情
资源评论
收起资源包目录
struts2-spring3-hinernate4.zip (17个子文件)
pom.xml 3KB
3struts-spring-hibernate.txt 8KB
src
main
webapp
WEB-INF
web.xml 998B
user
save.jsp 360B
index.jsp 364B
index.jsp 356B
resources
struts.xml 851B
log4j.xml 816B
applicationContext.xml 2KB
java
com
test
domain
User.java 656B
web
UserAction.java 740B
service
UserService.java 119B
impl
UserServiceImpl.java 247B
BaseServiceImpl.java 1KB
BaseService.java 424B
2struts-spring.txt 1KB
1struts.txt 3KB
共 17 条
- 1
资源评论
- oZouLang2014-05-15我是新手,看的不是很懂,不过还是要谢谢,你的分享精神
- liniao74122014-02-19很好的学习资料 谢谢分享!
xiejx618
- 粉丝: 226
- 资源: 75
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功