目前看mybatis源码时,看到一个问题,关于并发的。
问题连接:
http://www.iteye.com/problems/99255
问题大概描述为:
目前看mybatis源码时(看的很浅)一个问题一直没搞明白,我这边是主流的spring+mybatis。
问题如下:
每个dao都继承了 SqlSessionDaoSupport,而dao操作数据库的时候是用的父类SqlSessionDaoSupport的sqlSession,这个sqlSession是SqlSessionDaoSupport的一个变量
不明白的地方就在于:在启动tomcat的时候spring已经初始化了dao,由于dao是单例的,我的理解这样sqlSession对象也是同一个,同时,我在页面进行了多次查询发现sqlSession的对象的确是同一个。
大家都说sqlSession是不同的线程是不相同的。这个是怎么回事?并发怎么控制的?
一直困惑,看到热心人的回复,有了启发。于是看了下SqlSessionTemplate,
发现sqlsession的确通过SqlSessionTemplate运用动态代理的方法,进行控制并发的。
参见:
引用
http://longlongchang.blog.51cto.com/4725201/1171019
写的很详细
分享到:
相关推荐
在多线程环境中,如果对MyBatis的SqlSession、Mapper接口或者SqlSessionFactory等对象处理不当,就可能出现并发问题,比如`NullPointerException`。 1. **SqlSession的生命周期管理**: - SqlSession是MyBatis中...
10. **插件扩展**:MyBatis 提供了插件功能,允许用户自定义拦截器来拦截 SqlSession 的方法调用,进行额外的功能添加,如性能监控、日志记录等。 MyBatis 以其简洁、灵活的特性,在 Java 开发中得到了广泛应用。...
- 二级缓存的使用需要注意并发控制和数据一致性问题,因为它可能被多个线程访问。 8. **MyBatis 的集合处理** - MyBatis 支持 List、Set 等集合类型的映射,可以将查询结果自动转换为集合对象。 - 在 XML 映射...
1. **SqlSessionFactoryBuilder**: 这是创建SqlSessionFactory的构建器,SqlSessionFactory是MyBatis的核心组件,负责管理SqlSession和配置信息。你可以看到如何通过XML配置文件或者基于注解的方式构建...
二级缓存则跨SqlSession,可以在多个会话间共享数据,但需要注意并发控制和数据一致性问题。 总的来说,MyBatis以其简单易用和高度灵活的特性,成为Java开发中的主流持久层框架之一。通过深入理解并熟练掌握MyBatis...
二级缓存是全局的,不同SqlSession之间可以共享,但需要注意并发控制问题。 LibrarySupport可能包含了MyBatis所需的JAR文件,如mybatis.jar、mybatis-xmlmapper.jar、以及数据库驱动等。这些库文件确保了MyBatis...
二级缓存是Mapper级别的,可以跨SqlSession共享数据,但需要注意并发控制和数据一致性问题。 在实际项目中,Mybatis常常与Spring框架集成,形成Spring Mybatis,通过Spring的依赖注入和事务管理能力,可以进一步...
2. **SqlSessionTemplate**: 它是一个线程安全的 SqlSession 实现,可以避免在 Spring 应用中直接使用 SqlSession 的并发问题。SqlSessionTemplate 提供了与 SqlSession 相同的方法,但自动处理事务、异常和关闭资源...
然而,需要注意的是,二级缓存可能导致数据一致性问题,特别是在多线程环境下,因此在使用过程中需要关注并发控制和数据同步。 总之,MyBatis的缓存机制是提高系统性能的重要手段,一级缓存优化了单个SqlSession的...
2. **事务的隔离级别**:读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)、串行化(SERIALIZABLE),不同隔离级别对应不同的并发控制策略。 3. **事务的传播行为**:如...
- MyBatis默认不管理事务,需要用户自己控制。可以通过SqlSession的commit()和rollback()方法进行事务提交和回滚。 - 在Spring整合MyBatis时,可使用Spring的PlatformTransactionManager进行事务管理。 7. **插件...
1. **自动事务管理**:整合Spring的声明式事务管理,使得在MyBatis中可以方便地进行事务控制。 2. **SqlSession管理**:避免手动创建和关闭SqlSession,自动在Spring的上下文中处理SqlSession生命周期。 3. **...
二级缓存是Mapper级别的,多个SqlSession可以共享数据,但需要注意并发和数据一致性问题。 总的来说,MyBatis源码的学习可以帮助我们深入理解其工作原理,提高开发效率,更好地解决实际问题。通过阅读源码,我们...
MyBatis的文档详细介绍了配置、映射器、动态SQL、缓存、事务控制等多个方面。 6. **示例**:如果包含示例代码,通常会提供一个快速入门的项目,展示如何配置MyBatis,创建Mapper接口,编写XML映射文件,以及如何在...
这个Handler可以是Spring的Bean,通过依赖注入获得MyBatis的SqlSession,执行查询并返回结果: ```java // NettyHandler.java @Component public class NettyHandler extends ChannelInboundHandlerAdapter { @...
二级缓存则是全局的,可以在多个SqlSession之间共享,但需要注意并发控制问题。 9. **事务管理** MyBatis可以与Spring等框架集成,利用其事务管理功能。在没有外部框架的情况下,可以通过SqlSession的begin...
第二级缓存是全局的,跨SqlSession的,但需要注意并发问题。 9. **插件机制**: MyBatis允许开发者编写拦截器来拦截SqlSession的方法调用,从而实现如性能监控、日志记录等功能。 在MyBatis 3.1.1版本中,可能包括...
二级缓存则可以跨SqlSession共享数据,但需要注意并发控制和数据同步问题。 此外,MyBatis还支持插件机制,通过拦截器可以对SqlSession、Executor和Statement等对象的方法进行增强,实现如日志、性能分析等功能。 ...
2. 二级缓存:全局缓存,不同SqlSession之间可以共享数据,但需要注意并发控制问题。 六、MyBatis与Spring整合 1. 使用MyBatis-Spring库,简化MyBatis与Spring的集成。 2. SqlSessionFactoryBean:用于创建...
如果同一个 SqlSession 中再次执行相同的查询,MyBatis 就会直接从缓存中获取数据,避免了重复的数据库访问,提高了性能。 一级缓存的工作原理如下: 1. 当 SqlSession 开始时,一级缓存被创建。 2. 执行 SQL 查询...