流程:
1、通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂;
把配置文件mybatis-config.xml里面的一个个节点分别解析到Configuration对象内保存。
重点在于映射器的解析。
XMLMapperBuilder:解析mapper.xml;
xmlConfigbuilder:解析mybatis-config.xml;
XMLStatementBuilder:mapper中的sql通过parseStatementNode解析成MappedStatement;
2、由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行
3、mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。
基本执行器:通过Configuration指定executorType(SIMPLE, REUSE重用, BATCH批处理)来创建对应Executor。
简单执行器:是 MyBatis 中默认使用的执行器,每执行一次 update 或 select,就开启一个 Statement 对象,用完就直接关闭 Statement 对象(可以是 Statement 或者是 PreparedStatment 对象)。
重用执行器:重用指的是重复使用 Statement,它会在内部使用一个 Map 把创建的 Statement 都缓存起来,每次执行 SQL 命令的时候,都会去判断是否存在基于该 SQL 的 Statement 对象,如果存在 Statement 对象并且对应的 connection 还没有关闭的情况下就继续使用之前的 Statement 对象,并将其缓存起来。因为每一个 SqlSession 都有一个新的 Executor 对象,所以我们缓存在 ReuseExecutor 上的Statement 作用域是同一个 SqlSession。
批处理执行器,用于将多个SQL一次性输出到数据库;
缓存执行器:缓存执行器,先从缓存中查询结果,如果存在,就返回;如果不存在,再委托给 Executor delegate 去数据库中取,delegate 可以是上面任何一个执行器。
4、对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过 Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数
5、statementHandler用于封装JDBC中的statement操作,即声明sql,设置参数、执行sql等;执行器中每执行一次SQL操作,都会通过Configuration 构建一个新的StatementHandler
6、执对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过 Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。
7、执行正常则事务提交到DB,异常则回滚