Myabtis-spring

52 阅读1分钟

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也提供了事务管理