mybatis的执行流程

(1)问题分析:

主要想考察学生对mybatis的理解以及熟悉程度。

(2)核心答案讲解:

mybatis的执行流程如下:

​ 1)new SqlSessionFactoryBuilder().build(InputStream inputStream);这个是构造SqlSessionFactory的方法,返回的是DefaultSqlSessionFactory,在这个过程中已经创建了Configuration对象是通过XMLConfigBuilder的parse()方法创建的。

​ 2)SqlSessinoFactory.openSession() 返回的sqlSession是 DefaultSession类型的,此SqlSession里包含一个Configuration的对象,和一个Executor对象.

​ 3)sqlSession.getMapper(Class<T> type);这个是创建mapper的方法,内部是通过MapperProxyFactory(Mapper代理工厂)来创建一个mapper接口的代理对象。

​ 4)当执行mapper中相应的方法时,是通过反射执行的mapper代理对象的invoke方法,同时完成JavaBean对象到数据库参数之间的相互转换,这种映射关系就是有TypeHandler对象来完成的,在获取数据表对应的元数据时,会保存该表所有列的数据库类型。

​ (PS:下图为mybatis的执行流程,面试时可以给面试官画出来:)

通过上图,我们看出mybatis底层还是采用原生jdbc来对数据库进行操作的,只是通过 SqlSessionFactory,SqlSession,Executor,StatementHandler,ParameterHandler,ResultHandler和TypeHandler等几个处理器封装了这些过程。

(3)问题扩展:

在项目开发中,mybatis都是作为数据持久层的框架使用,并且一般都结合spring来使用。

我们开发者只需要关注 SQL本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。

Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

(4)结合项目中使用:

本题主要考察的是: mybatis的执行过程

点击此处
隐藏目录