- 浏览: 1247489 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (193)
- ant/maven (6)
- algorithm (5)
- tomcat/weblogic/jboss (6)
- javascript/jquery (13)
- java (33)
- flex/flash (0)
- JPA/Hibernate/myBatis (18)
- java concurrent (7)
- test (2)
- windows/linux (6)
- java collection (7)
- design pattern (2)
- life/health (3)
- database (12)
- IDE (4)
- spring/ejb (20)
- html/css/ckeditor (7)
- jsp/servlet (3)
- java io (13)
- java security (4)
- jni (0)
- svn/git (2)
- english (2)
- java jmx (1)
- xml (1)
- struts/springmvc (9)
- middleware (2)
- cache (1)
- cglib (3)
最新评论
-
jlotusYo:
博主,真感谢。
Java 密码扩展无限制权限策略文件 -
senninha:
这个。。是api说明吧。。
ScheduledExecutorService 源码分析 -
zoutao2008:
请问大文件如何处理?按你这种方式的话,文件超过200M时就会报 ...
hessian系列之二:上传文件 -
lwj1113:
lwj1113 写道谢谢博主这么细致的demo;在系列五中通过 ...
myBatis系列之五:与Spring3集成 -
lwj1113:
谢谢博主这么细致的demo;在系列五中通过testng测试类跑 ...
myBatis系列之五:与Spring3集成
myBatis系列之一:搭建开发环境
myBatis系列之二:以接口方式交互数据
myBatis系列之三:增删改查
myBatis系列之四:关联数据的查询
myBatis系列之五:与Spring3集成
myBatis系列之六:与SpringMVC集成
1. myBatis单独使用时,使用SqlSession来处理事务:
2. 和Spring集成后,使用Spring的事务管理:
a. @Transactional方式:
在类路径下创建beans-da-tx.xml文件,在beans-da.xml(系列五)的基础上加入事务配置:
服务类:
在测试类中加入:
b. TransactionTemplate方式
在beans-da-tx.xml中添加:
在UserService类加入:
在SpringIntegrateTxTest类中加入:
注:不可catch Exception或RuntimeException而不抛出:
myBatis系列之二:以接口方式交互数据
myBatis系列之三:增删改查
myBatis系列之四:关联数据的查询
myBatis系列之五:与Spring3集成
myBatis系列之六:与SpringMVC集成
1. myBatis单独使用时,使用SqlSession来处理事务:
public class MyBatisTxTest { private static SqlSessionFactory sqlSessionFactory; private static Reader reader; @BeforeClass public static void setUpBeforeClass() throws Exception { try { reader = Resources.getResourceAsReader("Configuration.xml"); sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); } finally { if (reader != null) { reader.close(); } } } @Test public void updateUserTxTest() { SqlSession session = sqlSessionFactory.openSession(false); // 打开会话,事务开始 try { IUserMapper mapper = session.getMapper(IUserMapper.class); User user = new User(9, "Test transaction"); int affectedCount = mapper.updateUser(user); // 因后面的异常而未执行commit语句 User user = new User(10, "Test transaction continuously"); int affectedCount2 = mapper.updateUser(user2); // 因后面的异常而未执行commit语句 int i = 2 / 0; // 触发运行时异常 session.commit(); // 提交会话,即事务提交 } finally { session.close(); // 关闭会话,释放资源 } } }
2. 和Spring集成后,使用Spring的事务管理:
a. @Transactional方式:
在类路径下创建beans-da-tx.xml文件,在beans-da.xml(系列五)的基础上加入事务配置:
<!-- 事务管理器 --> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- 事务注解驱动,标注@Transactional的类和方法将具有事务性 --> <tx:annotation-driven transaction-manager="txManager" /> <bean id="userService" class="com.john.hbatis.service.UserService" />
服务类:
@Service("userService") public class UserService { @Autowired IUserMapper mapper; public int batchUpdateUsersWhenException() { // 非事务性 User user = new User(9, "Before exception"); int affectedCount = mapper.updateUser(user); // 执行成功 User user2 = new User(10, "After exception"); int i = 1 / 0; // 抛出运行时异常 int affectedCount2 = mapper.updateUser(user2); // 未执行 if (affectedCount == 1 && affectedCount2 == 1) { return 1; } return 0; } @Transactional public int txUpdateUsersWhenException() { // 事务性 User user = new User(9, "Before exception"); int affectedCount = mapper.updateUser(user); // 因后面的异常而回滚 User user2 = new User(10, "After exception"); int i = 1 / 0; // 抛出运行时异常,事务回滚 int affectedCount2 = mapper.updateUser(user2); // 未执行 if (affectedCount == 1 && affectedCount2 == 1) { return 1; } return 0; } }
在测试类中加入:
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:beans-da-tx.xml" }) public class SpringIntegrateTxTest { @Resource UserService userService; @Test public void updateUsersExceptionTest() { userService.batchUpdateUsersWhenException(); } @Test public void txUpdateUsersExceptionTest() { userService.txUpdateUsersWhenException(); } }
b. TransactionTemplate方式
在beans-da-tx.xml中添加:
<bean id="txTemplate" class="org.springframework.transaction.support.TransactionTemplate"> <constructor-arg type="org.springframework.transaction.PlatformTransactionManager" ref="transactionManager" /> </bean>
在UserService类加入:
@Autowired(required = false) TransactionTemplate txTemplate; public int txUpdateUsersWhenExceptionViaTxTemplate() { int retVal = txTemplate.execute(new TransactionCallback<Integer>() { @Override public Integer doInTransaction(TransactionStatus status) { // 事务操作 User user = new User(9, "Before exception"); int affectedCount = mapper.updateUser(user); // 因后面的异常而回滚 User user2 = new User(10, "After exception"); int i = 1 / 0; // 抛出运行时异常并回滚 int affectedCount2 = mapper.updateUser(user2); // 未执行 if (affectedCount == 1 && affectedCount2 == 1) { return 1; } return 0; } }); return retVal; }
在SpringIntegrateTxTest类中加入:
@Test public void updateUsersWhenExceptionViaTxTemplateTest() { userService.txUpdateUsersWhenExceptionViaTxTemplate(); // }
注:不可catch Exception或RuntimeException而不抛出:
@Transactional public int txUpdateUsersWhenExceptionAndCatch() { // 事务性操作,但是外围框架捕获不到异常,认为执行正确而提交。 try { User user = new User(9, "Before exception"); int affectedCount = mapper.updateUser(user); // 执行成功 User user2 = new User(10, "After exception"); int i = 1 / 0; // 抛出运行时异常 int affectedCount2 = mapper.updateUser(user2); // 未执行 if (affectedCount == 1 && affectedCount2 == 1) { return 1; } } catch (Exception e) { // 所有异常被捕获而未抛出 e.printStackTrace(); } return 0; }
发表评论
-
myBatis系列之八:分页查询
2014-01-13 22:07 0分页查询:物理分页,不是内存分页: 1. 在sql语句中指定 ... -
myBatis系列之六:与SpringMVC集成
2013-12-26 13:33 5953myBatis系列之一:搭建开发环境 myBatis系列之二: ... -
myBatis系列之五:与Spring3集成
2013-12-09 14:31 5043myBatis系列之一:搭建开 ... -
myBatis系列之四:关联数据的查询
2013-12-08 13:36 9766myBatis系列之一:搭建开发环境 myBatis系列之二: ... -
myBatis系列之三:增删改查
2013-12-01 22:36 5090myBatis系列之一:搭建开发环境 myBatis系列之二: ... -
myBatis系列之二:以接口方式交互数据
2013-11-25 22:46 12422myBatis系列之一:搭建开发环境 myBatis系列之三: ... -
myBatis系列之一:搭建开发环境
2013-11-18 22:00 8596myBatis系列之二:以接口方式交互数据 myBatis系列 ... -
JPA 一对一关联
2012-08-18 17:12 3274在一对一关联中,JPA没有规定谁为关系的维护方,OneToOn ... -
Hibernate 集合类型使用
2012-08-11 18:31 1374为了映射实体中的集合 ... -
Hibernate 组件关联关系
2012-08-11 15:10 1297实体关联的属性是个复杂类型的持久化类,但不是实体:数据库中没有 ... -
Hibernate 一对多关联配置
2012-08-09 22:13 1881以Department和Employee为例。 Depart ... -
Hibernate 继承关系配置
2012-08-08 23:33 4091以Department和Employee实体为例。Develo ... -
Hibernate 多对一关联配置
2012-08-08 21:51 28350实体是Employee和Department,它们之间是多对一 ... -
Hibernate 查询分析
2012-08-08 19:15 0private void fireLoad(LoadEv ... -
Hibernate 配置文件
2012-07-25 20:17 0<properties> < ... -
jdbc 批处理操作
2012-05-15 15:43 1457jdbc的批处理操作是指把一组SQL语句(增删改操作)一次性提 ... -
jdbc调用postgreSQL数据库内置函数
2012-05-08 16:02 31631. current_timestamp 返回的是当前的 ... -
构建Hibernate项目
2012-04-25 20:35 01. 新建一个Java Project 2. 添加hiber ... -
乐观锁与悲观锁
2012-04-24 22:50 2816悲观锁: 读取数据的时候对记录加锁,直到提交数据更新后解锁 ... -
Hibernate映射文件的配置
2012-04-20 22:21 01. type值不是指java类型或者数据库的类型,而是Hib ...
相关推荐
本篇文章将深入探讨MyBatis系列中的第五个主题——如何将MyBatis与Spring3进行集成,以实现更高效、更灵活的Java企业级应用开发。 MyBatis是一个轻量级的SQL映射框架,它允许开发者将SQL语句直接写在XML配置文件...
然后,配置MyBatis的核心文件`mybatis-config.xml`,定义数据源、事务管理器以及日志设置。例如: ```xml <property name="url" value="jdbc:mysql://localhost:3306/mydatabase?useSSL=false&...
在本篇中,我们将深入探讨"Mybatis系列一:开发环境搭建"的相关知识,这将包括如何设置一个基于Maven的Mybatis开发环境,以及如何理解并使用Mybatis的核心概念。首先,我们需要明白Mybatis是一个优秀的持久层框架,...
这个版本是MyBatis系列的一个稳定版本,包含了对先前版本的改进和新特性。 在MyBatis 3.4.5中,开发者可以期待以下关键特性: 1. **动态SQL**:MyBatis的强项之一是其强大的动态SQL支持。你可以直接在XML映射文件...
本资源是"Mybatis系列学习源码",适合初学者和有一定经验的开发者深入理解Mybatis的工作原理和实践应用。下面将详细探讨Mybatis的核心概念和关键功能。 1. **SqlSession与Executor** - **SqlSession**:它是...
【标题】:Mybatis系列教程Mybatis基本应用共9页.pdf 【描述】:这份教程是关于Mybatis基本应用的详细讲解,包含了9页丰富的内容,旨在帮助学习者深入理解和掌握Mybatis这一强大的持久层框架。 【标签】:Mybatis...
MyBatis需要配置数据源、事务管理器以及Mapper扫描器。Ext Js 3则需要配置Ajax proxy来与Spring MVC的RESTful API进行通信。 在角色管理模块的实现中,通常会包含以下功能: 1. 角色列表展示:使用GridPanel展示...
在本文中,我们将深入探讨如何将Spring MVC 3.1与MyBatis 3.1框架集成,并讨论其中涉及的关键技术,如事务管理、分页和JSON数据交换。此外,我们还将简要提及开发环境中使用的工具,如Eclipse 4.3、Maven 3.0.5和...
6. **插件与事务管理**:讨论插件如何与Mybatis的事务管理机制协同工作,确保数据的一致性。 7. **性能优化**:通过实例展示如何使用插件进行性能优化,比如减少不必要的数据库查询,提高SQL执行效率。 8. **最佳...
- 配置文件(mybatis-config.xml):这是MyBatis的核心配置,包含了数据源、事务管理器和Mappers的定义。 - 映射文件(UserMapper.xml):展示了如何定义SQL语句,如SELECT、INSERT、UPDATE和DELETE,并将它们映射...
- XML 配置文件:定义数据源、事务管理器、映射文件等,是 Mybatis 的全局配置。 - 映射文件(Mapper XML):包含 SQL 语句和结果映射,可以使用参数占位符和动态 SQL。 - 注解配置:在 Java 类上直接使用注解...
9. **事务管理**:Mybatis支持手动和自动事务管理,通过SqlSession的beginTransaction、commit和rollback方法控制。 10. **插件机制**:Mybatis允许自定义插件拦截Executor、StatementHandler、ParameterHandler和...
08`、`mybatis-02`、`mybatis-09`、`mybatis-01`、`mybatis-07`:这些文件可能代表了不同章节的源代码或者笔记,按照顺序可能是Mybatis的基础到进阶的各个主题,例如配置、SQL映射文件、动态SQL、事务管理等。...
MyBatis是一款优秀的ORM...本章主要内容:MyBatis与Spring如何集成,声明式事务管理,MapperScannerConfigurer本次课程,在YY上进行,YY频道:71042615课程回放:http://bbs.51cto.com/open/do/course/cid/65系列课程:...
5. **Spring与MyBatis整合**:解释如何将MyBatis集成到Spring项目中,利用Spring的事务管理。 最后,SpringMVC是Spring框架的Web模块,用于构建MVC架构的Web应用。SpringMVC面试专题可能包含: 1. **请求处理流程*...
【标题】"Mybatis系列教程Mybatis注解开发共9页.pdf" 提供的是一个关于Mybatis框架注解开发的教程,重点在于讲解如何在Mybatis中使用注解进行数据库操作。Mybatis是一个轻量级的Java持久层框架,它允许开发者通过...
6. **MyBatis与Spring整合**:在SSM架构中,MyBatis与Spring的整合可以实现事务管理、依赖注入等功能,简化项目开发。 7. **Mapper接口与XML映射文件**:Mapper接口定义业务方法,XML映射文件中定义SQL语句,通过...
【标题】:Mybatis系列教程Mybatis架构原理共4页.pdf 【描述】:这个压缩文件包含了一份关于Mybatis架构原理的系列教程,总计四页的内容。Mybatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。...