判断是否线程安全的规则:是否存在多线程间可共享的变量
sqlsessionfactory是线程安全的,默认的实现类只有一个final属性。
sqlsession单独来看是线程不安全的,但是我们用mybatis时,mapper接口的使用是基于动态代理,这里有两种情况:(事务@transaction)
- 不使用事务时,线程安全,每个sql会新建一个sqlsession对象(opensession方法),是线程安全的;
- 使用事务时,用threadlocal保证每个线程对应一个sqlsession对象,所以也是线程安全的。