SSM配置事务的方式之Xml形式:
在applicationContext.xml文件中添加:
<!-- 事务控制
不使用事务控制的时候,增删改也能进行,
那可能是spring与mybatis整合之后,
spring自动调用了mybatis底层的JDBC去处理事务,但这种处理事务是dao层的,也就是mapper层的
我们真正需要的事务处理是service层的.service中某个业务调用dao层中多个方法时,要么同时成功,要么同时失败,
这才是我们需要的事务控制-->
<!--控制事务的类-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--Xml方式配置事务-->
<!--具体有哪些增强的方法-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!--查询方法的事务-->
<tx:method name="find*" read-only="true"/>
<!--增删改方法的事务-->
<tx:method name="*"/>
<!--如果第一个满足条件,就不会走第二个,所以有顺序问题-->
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="txPointcut" expression="execution(* com.xiongluoluo.service.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
</aop:config>
SSM配置事务的方式之注解形式:
1.在applicationContext.xml文件中添加:
<!-- 事务控制
不使用事务控制的时候,增删改也能进行,
那可能是spring与mybatis整合之后,
spring自动调用了mybatis底层的JDBC去处理事务,但这种处理事务是dao层的,也就是mapper层的
我们真正需要的事务处理是service层的.service中某个业务调用dao层中多个方法时,要么同时成功,要么同时失败,
这才是我们需要的事务控制-->
<!--控制事务的类-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 注解形式配置事务的方式(直接在需要添加事务的方法写注解即可)-->
<!--增删改的注解 @Transactional(transactionManager = "transactionManager")-->
<!--查询的注解(由于查询不需要提交事务,可以设置为只读的,提高性能)
@Transactional(transactionManager = "transactionManager",readOnly = true)-->
<tx:annotation-driven/>
2.在需要事务处理的方法上添加注解(一般是service层的方法)
@Service
public class DepartmentServiceImpl implements DepartmentService {
@Autowired
private DepartmentMapper departmentMapper;
/*这个报红没影响,因为mapper的创建对象方式跟别的对象不一样,认真理解一下*/
@Override
@Transactional(transactionManager = "transactionManager")
public void saveDepartment(Department department) {
departmentMapper.insertDepartment(department);
}
@Override
@Transactional(transactionManager = "transactionManager")
public void removeDepartment(Integer id) {
departmentMapper.deleteDepartment(id);
}
@Override
@Transactional(transactionManager = "transactionManager")
public void editDepartment(Department department) {
departmentMapper.updateDepartment(department);
}
@Override
@Transactional(transactionManager = "transactionManager")
public Department findDepartmentById(Integer id) {
return departmentMapper.selectDepartmentById(id);
}
@Override
@Transactional(transactionManager = "transactionManager",readOnly = true)
public List<Department> findAllDepartment() {
return departmentMapper.selectAllDepartment();
}
@Override
@Transactional(transactionManager = "transactionManager",readOnly = true)
public Department findDepartmentByNameAndPassword(String name, String password) {
return departmentMapper.selectDepartmentByNameAndPassword(name,password);
}
}