Spring MVC + mybatis + mysql 事务回滚服务层,用@Transactional方式注解事务。
1、mysql建表设置引擎为INNODB,如:
ALTER TABLE goods_order ENGINE = INNODB;
2、服务层
public interface IGoodsOrderService { /** * 添加订单 * @param order * @return */ boolean addOrder(GoodsOrder order) throws Exception; }
@Service public class GoodsOrderServiceImpl implements IGoodsOrderService { @Autowired private IGoodsOrderDao orderDao; @Autowired private IGoodsOrderDetailDao orderDetailDao; @Autowired private IGoodsOrderStatusDao orderStatusDao; @Override @Transactional(readOnly=false,propagation=Propagation.REQUIRED,rollbackFor=Exception.class) public boolean addOrder(GoodsOrder order) throws Exception { boolean result = false; try { if (null != order.getDetails() && order.getDetails().size() > 0) { order.setOrderNum(order.getDetails().size()); // 添加订单 orderDao.addGoodsOrder(order); // 添加订单详细 for (GoodsOrderDetail orderDetail : order.getDetails()) { // orderDetail.setOrderNo(order.getOrderNo()); orderDetailDao.addGoodsOrderDetail(orderDetail); } result = true; } } catch (Exception e) { //事务回滚异常需要抛出来 throw e; } return result; } }
3、配置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:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" 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.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd" default-lazy-init="true"> <!-- 加载jdbc.properties文件 --> <context:property-placeholder location="classpath:jdbc.properties" /> <!-- Root Context: defines shared resources visible to all other web components --> <context:annotation-config /> <context:component-scan base-package="com.test" /> <!-- 数据源 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${db.driver}" /> <property name="url" value="${db.url}" /> <property name="username" value="${db.username}" /> <property name="password" value="${db.password}" /> <property name="minIdle" value="1" /> <property name="maxActive" value="25" /> <property name="maxIdle" value="5" /> </bean> <!-- mybatis 配置 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="mapperLocations" value="classpath:myibatis/*-mapper.xml" /> <property name="dataSource" ref="dataSource" /> <property name="typeAliasesPackage" value="com.test.domain" /> </bean> <!-- 扫描Dao层 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.test.dao" /> <property name="annotationClass" value="org.springframework.stereotype.Repository" /> </bean> <!-- 事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- 事物配置 --> <tx:annotation-driven transaction-manager="transactionManager" /> </beans>
4、spring-servlet.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:p="http://www.springframework.org/schema/p" xmlns:mongo="http://www.springframework.org/schema/data/mongo" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <!-- 扫描系统Module--> <context:component-scan base-package="com.test.dao" /> <context:component-scan base-package="com.test.service"> <!-- component-scan和事务所在的上下文不一样,先不让spring扫描到@Service注解的类。否则@Transactional注解会失效 --> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" /> </context:component-scan> <context:component-scan base-package="com.test.controller" /> <!-- spring mvc view --> <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <!-- <property name="prefix" value="/WEB-INF/views/" /> --> <property name="prefix" value="/views/" /> <property name="suffix" value=".jsp" /> </bean> </beans>
相关推荐
**Spring MVC注解方式** 1. **Controller注解**:`@Controller`是Spring MVC中的核心注解,用于标记一个类作为处理HTTP请求的控制器。在类上添加此注解后,Spring会将该类实例化,并将其纳入到Spring容器中管理。 ...
7. **实现事务回滚**:当在@Transactional注解的方法中发生异常时,Spring会自动回滚事务。例如,如果在保存数据时发生错误,整个事务将被回滚,保证数据的一致性。 8. **测试与调试**:完成整合后,通过编写单元...
11. **@Transactional**:用于标记一个方法或类为事务边界,Spring会自动管理事务的开始、提交或回滚。 12. **@Component, @Service, @Repository**: 这些是Spring的组件注解,用于定义Bean。@Component是最基本的...
5. **异常与事务回滚**: 如果在@Transactional注解的方法中抛出未检查异常(继承自RuntimeException的异常)或者在@Transactional注解中明确列出的检查异常,Spring会自动回滚事务。否则,事务将在方法正常结束时...
3. 配置和使用Spring的事务管理,了解如何通过@Transactional注解处理异常时的回滚逻辑。 4. 整合Hibernate的实体类和表之间的映射,学习如何通过注解定义实体属性和关系。 5. 错误和异常处理,包括自定义异常处理器...
- **事务管理**:Spring如何结合Hibernate提供声明式事务管理,通过@Transactional注解实现事务的开始、提交和回滚。 - **整合测试**:如何使用JUnit和Mockito等工具进行集成测试,验证三大框架的协同工作。 此外,...
在本案例中,我们将深入探讨Spring 3.0框架的核心组件——Model-View-Controller(MVC)架构,以及如何结合使用Spring MVC注解和`SpringJdbcDaoSupport`类来构建一个高效、灵活的后端系统。Spring 3.0是Spring框架的...
Spring Test提供了`@Transactional`注解来自动回滚事务,避免测试之间的影响。此外,可以使用`@Before`和`@After`方法来自定义测试前后的准备和清理工作。 总之,通过正确使用JUnit、Mockito、Spring Test以及...
在本项目中,很可能使用了@Transactional注解来实现声明式事务管理,这样可以在方法级别控制事务的开始、提交、回滚等操作,确保数据的一致性。 "分页排序查询"是Web应用中常见的需求,Spring MVC 和 Ibatis 结合...
4. **Spring事务管理**:Spring的@Transactional注解可以实现声明式事务管理,即在方法上添加此注解,Spring会自动进行事务的开启、提交、回滚等操作。这使得开发者无需手动管理事务,降低了出错的可能性,也使得...
在Spring MVC中,控制器通常是实现了`@Controller`注解的类。 4. **服务层(Service)**:包含业务逻辑,处理业务规则和事务。服务层通常会注入DAO,通过Spring的DI功能实现。 5. **数据访问层(DAO)**:处理...
声明式事务管理更简洁,只需在需要事务的方法上添加@Transactional注解,Spring会自动进行事务的开启、提交或回滚。 数据库文件的提供意味着项目包含了创建和初始化数据库的脚本,这有助于快速搭建环境并进行数据...
声明式事务管理更为常见,它通过在服务层的方法上添加@Transactional注解,由Spring自动进行事务的开启、提交或回滚。配置文件中,我们需要定义DataSource、SessionFactory、HibernateTransactionManager等Bean,并...
当这个注解添加到方法上时,Spring会自动开启和提交事务,如果出现异常则回滚。 "含所有jar包"表示这个项目包含了运行所需的所有依赖库,包括Spring、Spring MVC、Hibernate以及它们所依赖的其他库,例如数据库驱动...
在Spring MVC中,事务管理是保证数据一致性和完整性的关键部分,而异常处理则有助于确保系统在遇到错误时能够优雅地恢复或者向用户反馈合适的错误信息。接下来,我们将深入探讨Spring MVC中的事务配置和异常处理。 ...
5. **事务管理**:Spring提供了一种声明式事务管理,可以在服务层的方法上添加@Transactional注解,由Spring自动处理事务的开始、提交或回滚。需要正确配置PlatformTransactionManager,如...
此外,Spring的@TestTransactional注解可以帮助我们在单个测试方法中开启和提交事务,这对于测试业务层的事务性行为非常有用。 总结来说,使用JUnit针对Spring MVC的三层进行测试,我们需要: 1. 测试表现层...
这样,Spring会在方法开始时开启事务,方法结束时根据执行情况提交或回滚事务。 在实际开发中,还需要考虑错误处理、日志记录、安全性等方面。Spring MVC提供了ModelAndView或ResponseBody等机制来处理返回的视图,...
在Spring MVC框架中,`@Controller`、`@RequestMapping`等注解的广泛使用使得开发更加简洁高效。而Interceptor(拦截器)则是Spring MVC提供的一种强大的机制,它允许我们在请求处理之前或之后执行一些自定义逻辑,...
5. **事务管理**:MyBatis可以与Spring集成,利用Spring的事务管理功能,实现事务的提交和回滚。 三、Spring MVC与MyBatis集成 1. **配置MyBatis-Spring**:引入mybatis-spring库,配置SqlSessionFactoryBean和...