序言
如果开发者不清楚Mybatis组件的生命周期,很可能会带来很严重的并发问题。
SqlSessionFactory
作用
SqlSesssionFactory采用单例模式,唯一的作用是创建SQLSession。
生命周期
每次应用程序访问数据,我们就要通过SqlSessionFactory创建SQLSession,因此SqlSessionFactory应该在MyBatis应用的整个生命周期中。
建议
正确的做法是,每个数据库只对应一个SqlSessionFactory实例。
SqlSession
作用
SqlSession就是一个会话,相当于JDBC的Connection对象。它可以帮我们获取Mapper。
生命周期
SqlSession的生命周期是在请求数据库处理事务的过程中。它存活于一个应用的请求和操作,可以执行多条SQL,保证事务的一致性。
或者说,它随着请求事务会话结束而销毁。
注意
每次创建的SqlSession都必须及时关闭, 释放数据库连接池的资源。例如,事务要及时提交,声明了事务的方法不能耗时太长。
Mapper
作用
Mapper是一个接口,没有任何实现类, 他的作用是发送SQL,然后返回我们需要的结果,或者执行SQL从而修改数据库的数据,因此它应该在一个SqlSession事务方法之内,是一个方法级别的东西。
简单地说,Mapper相当于去执行一条条的SQL。
从具体的说,他定义了参数类型,描述缓存,描述SQL语句,定义了查询结果和POJO的映射关系。
生命周期
它就如同JDBC中的一条SQL语句的执行,它最大的范围和SqlSession是相同的。
或者说,它的实例随SqlSession的销毁而销毁。

375

被折叠的 条评论
为什么被折叠?



