Executor 详解

SqlSession 是 Mybatis 提供个的操作数据库的API ,但是真正执行SQL的是Executor组件,Executor接口定义了对数据库的增删改查方法。Executor 接口中有几种不同的实现类。

BaseExecutor 中定义的方法的执行流程以及通用的处理逻辑,具体交给子类来实现,是典型的模板模式的应用。

  • SimpleExecutor 是基础的 Executor,能够完成基本的增删改查
  • ReuseExecutor 对JDBC中的Statement对象做了缓存,当执行相同的sql时,会直接从缓存中获取Statement对象进行复用,避免了频繁创建和销毁对象,从而提升性能
  • BatchExecutor 则会调用同一个Mapper执行update、insert、delete操作,调用Statement对象进行批量操作
  • 我们都知道mybatis 有一级缓存和二级缓存,当mybatis开启了二级缓存的时候,会使用CachingExecutor 对 SimpleExecutor、ReuseExecutor、BatchExecutor进行装饰,为查询增加二级缓存功能

直接使用Executor 组件与数据库交互:

  // 获取文件的输入流
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        // 获取sqlSessionFactory 实例
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 获取sqlSession 实例
        SqlSession sqlSession = sqlSessionFactory.openSession();
        Configuration configuration = sqlSession.getConfiguration();
        // 从configuration 对象中获取描述sql配置的MappedStatement对象
        MappedStatement mappedStatement = configuration
                .getMappedStatement("com.lxq.mybatis.mapper.UserMapper.listUser");
        // 创建ReuseExecutor实例
        Executor reuseExecutor = configuration.newExecutor(
                new JdbcTransaction(sqlSession.getConnection()), ExecutorType.REUSE);
        // 调用query方法查询
        List<Object> query = reuseExecutor
                .query(mappedStatement, null, RowBounds.DEFAULT, Executor.NO_RESULT_HANDLER);

 Executor 要和数据库交互的话,需要mapper 配置信息,Mybatis 通过 MappedStatement 对象描述的mapper 的配置信息,因此 Executor 需要一个MappedStatement 对象作为参数,Mybatis 启动时,回去解析mapper 的配置信息,将所有的mapper配置层MappedStatement对象注册到 Configuration 组件中,我们可以调用 Configuration 对象的 getMappedStatement方法 来获取对象。然后根据SQL类型调用Executor 对象的query 或者 update 方法即可。

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页