基于MyBatis3.4.4
1、架构图
针对接口层两种调用方式,简单提供两种演示代码
/** * 基于statementId * @throws IOException */ public void test1() throws IOException { //1、读取配置文件 读成字节输入流 InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml"); //2.解析配置文件 封装configuration对象 创建DefaultSqlSessionFactory对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); //3.创建DefaultSqlSessionFactory实例对象 设置事务不自动提交,完成executor对象创建 SqlSession sqlSession = sqlSessionFactory.openSession(); //4. 根据statementId来获取configuration中map集合中到指定的mappedStatement对象 // 将查询任务委派给executor对象 List<Object> objects = sqlSession.selectList("namespace.id"); } /** * mapper代理方式 */ public void test2() throws IOException { //1、读取配置文件 读成字节输入流 InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml"); //2.解析配置文件 封装configuration对象 创建DefaultSqlSessionFactory对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); //3.创建DefaultSqlSessionFactory实例对象 设置事务不自动提交,完成executor对象创建 SqlSession sqlSession = sqlSessionFactory.openSession(); IUserMapper mapper = sqlSession.getMapper(IUserMapper.class); mapper.findAllUser(); }
2、执行流程
2.1、Executor功能
1. 简单执行器
simpleExecutor,每次执行SQL需要预编译SQL语句。
2. 可重用执行器
ReuseExecutor,同一SQL语句执行只需要预编译一次SQL语句
3. 批处理执行器
BatchExecutor,只针对修改操作的SQL语句预编译一次,并且需要手动刷新SQL执行才生效。
4. 执行器抽象类
BaseExecutor,执行上面3个执行器的重复操作,比如一级缓存、doQuery、doUpdate方法。
5. 二级缓存
CachingExecutor,与一级缓存的区别:一级缓存查询数据库操作后会直接缓存,二级缓存需要当次数据库操作提交事务后才能进行缓存(二级缓存跨线程处理,一级缓存不用)。