mybatis剖析
-
一开始使用
new SqlSessionFactoryBuilder()去生成一个sqlsessionBuilder -
使用
builder方法 去生成一个`sqlSessioinFactory对象。这里通过传入的xml配置文件经过XMLConfigBuilder解析来产生一个Configuration,最后builder去返回一个sqlSessioinFactory对象public SqlSessionFactory build(Reader reader, String environment, Properties properties) { SqlSessionFactory var5; try { XMLConfigBuilder parser = new XMLConfigBuilder(reader, environment, properties); var5 = this.build(parser.parse()); } catch (Exception var14) { throw ExceptionFactory.wrapException("Error building SqlSession.", var14); } finally { ErrorContext.instance().reset(); try { if (reader != null) { reader.close(); } } catch (IOException var13) { } } return var5; }
- 这里 sqlSessionFactory 的openSession 从dataSource或者 connection中获取
-
一种是池化的数据源 一种是非池化的数据源(本质上还是通过class.forName去获取连接)。
private synchronized void initializeDriver() throws SQLException { if (!registeredDrivers.containsKey(this.driver)) { try { Class driverType; if (this.driverClassLoader != null) { driverType = Class.forName(this.driver, true, this.driverClassLoader); } else { driverType = Resources.classForName(this.driver); } Driver driverInstance = (Driver)driverType.getDeclaredConstructor().newInstance(); DriverManager.registerDriver(new DriverProxy(driverInstance)); registeredDrivers.put(this.driver, driverInstance); } catch (Exception var3) { throw new SQLException("Error setting driver on UnpooledDataSource. Cause: " + var3); } } }
- 池化的数据源 会从非池化的数据源 中获取信息
mybatis整合spring
- spring为我们提供了
修改数据源
- 使用第三方提供的
- 使用mybatis内置的
- 在spring config 配置类中 配置
事务
- mybatis默认使用的jdbc提供的事务管理
- spring也提供了事务管理