使用注解实现事务(声明事务)
目标:通过事务,使以下方法要么全成功、要么全失败。
public void addStudent(){
//增加班级
//增加学生
//crud(增加、读取、更新、删除)
}
一、添加jar包
事务jar包:
spring-tx.RELEASE.jar
数据库驱动jar包:
ojdbc.jar
连接池jar包:
commons-pool.jar
连接池使用到的数据源:
commons-dbcp.jar
Spring的jdbc的jar包:
spring-jdbc.RELEASE.jar
AOP包:
aopalliance.jar
二、配置
使用Spring也可以处理数据库。
a.增加事务tx的命名空间:
xmlns:tx="http://www.springframework.org/schema/tx"
b.配置文件添加支持:
<!--增加对事务的支持 -核心 -->
<tx:annotation-driven transaction-manager="txManager"/>
c.使用:
在需要成为事务的方法前添加 @Transactional注解。
如:
/*使用@Transactional注解后,addStudent()方法就是一个事务
* 在该方法中,要么全成功要么全失败;
* 事务属性:
* readOnly: 该事务时否仅仅可读
* propagation: 事务的传播属性
* ......
*/
@Transactional(readOnly=false,propagation= Propagation.REQUIRED )
public void addStudent(Student student) {
//if(该学生是否存在)
//增加其他...
studentDao.addStudent(student);
}
注:
链接数据库时,注意要有时区,否则会报错。
数据库连接配置:
<!--配置数据库相关-->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/springdatabase?characterEncoding=utf-8&useSSL=true&serverTimezone=UTC"></property>
<property name="username" value="????"></property>
<property name="password" value="????"></property>
<property name="maxActive" value="10"></property>
<property name="maxIdle" value="6"></property>
</bean>