Mybatis的核心对象及运行流程

一、SqlSessionFactory对象   1、SqlSessionFactory是MyBatis的关键对象,它是个单个数据库映射关系经过编译后的内存镜像。        2、SqlSessionFactory对象的实例可以通过SqlSessionFactoryBuilder对象类获得。而SqlSessionFactoryBuilder则可以从XML配置文件或一个预先定制的Configuration的实例构建出SqlSessionFactory的实例。每一个MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心。同时SqlSessionFactory也是线程安全的,SqlSessionFactory一旦被创建,应该在应用执行期间都存在.在应用运行期间不要重复创建多次,建议使用单例模式。SqlSessionFactory是创建SqlSession的工厂。   3、 SqlSessionFactory接口源码如下所示:    public interface SqlSessionFactory {       SqlSession openSession();       SqlSession openSession(boolean autoCommit);       SqlSession openSession(Connection connection);       SqlSession openSession(TransactionIsolationLevel level);       SqlSession openSession(ExecutorType execType);
      SqlSession openSession(ExecutorType execType, boolean autoCommit);       SqlSession openSession(ExecutorType execType, TransactionIsolationLevel level);       SqlSession openSession(ExecutorType execType, Connection connection);       Configuration getConfiguration();     }   4、SqlSessionFactoryBuilder构建SqlSessionFactory实例的方式      (1)从XML配置文件构建(推荐使用)        Reader reader = Resources.getResourceAsReader("mybatis-config.xml");       sessionFactory = new SqlSessionFactoryBuilder().build(reader);    SqlSessionFactory会根据Resources资源信息加载对象,获取开发人员在项目配置文件(mybatis-config.xml)的信息,从而产生一个可以与数据库交互的会话实例----SqlSession          (2)预制Configuration实例的方式构建(java代码方式)        DataSource dataSource = new PooledDataSource("com.mysql.jdbc.Driver",                           "jdbc:mysql://localhost/mybatis?useSSL=false&serverTimezone=UTC", "admin", "123456");           Environment environment = new Environment("development ", new JdbcTransactionFactory(), dataSource);           Configuration configuration = new Configuration(environment);           configuration.addMapper(EmployeeMapper.class);          SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);      5、SqlSessionFactoryBuilder类:是构建sqlSessionFactory的入口类,它是通过不同的入参来构造SqlSessionFactory。 它是用过即释放,其生命周期只存在于方法体内, SqlSessionFactory是单例的,存在于整个应用运行时    Mybatis的核心对象及运行流程Mybatis的核心对象及运行流程   二、SqlSession对象:    SqlSession是MyBatis的关键对象,它是应用程序与持久层之间交互操作的一个单线程对象,类似于JDBC中的Connection。SqlSession对象完全包含以数据库为背景的所有执行SQL操作的方法,它的底层封装了JDBC连接,可以用SqlSession实例来直接执行被映射的SQL语句。每个线程都应该有它自己的SqlSession实例。SqlSession的实例不能被共享,同时SqlSession也是线程不安全的。绝对不能将SqlSeesion实例的引用放在一个类的静态字段甚至是实例字段中。也绝不能将SqlSession实例的引用放在任何类型的管理范围中,比如Servlet当中的HttpSession对象中。使用完SqlSeesion之后关闭很重要,应该确保使用finally块来关闭它。   三、Mybatis的运行流程   Mybatis的整个运行流程是紧紧围绕着数据库连接池配置文件(mybatis-config.xml),以及SQL映射配置文件(xxxMapper.xml)而展开的     首先SqlSessionFactory会话工厂通过Resources资源信息加载对象获取配置文件(mybatis-config.xml)的配置信息,然后产生可以与数据库进行交换的会话实例类SqlSession,会话实例类根据Mapper配置文件中的SQL配置,去执行相应的增、删、改、查操作。而在SqlSession类的内部是通过执行器Executor(分为基本执行器或缓存执行器)对数据库进行操作。执行器Executor与数据库交互依靠的是底层封装对象Mappered Statement,它封装了从Mapper文件中读取的信息(包括SQL语句、输入参数、输出结果类型)。通过执行器Executor与底层封装对象Mappered Statement的结合,Mybatis就实现了与数据库进行交互的功能   Mybatis运行流程图如下: Mybatis的核心对象及运行流程              
上一篇:mybatis执行流程


下一篇:【从零开始学Mybatis笔记】Dao开发方法