Mybatis工作原理
2019-04-02
阅读次数:
1.工作原理
- Mybatis应用程序通过SQLSessionFactoryBuilder从mybatis-config.xml配置文件(也可以用Java文件配置的方式,需要添加@Configuration)中构建出SQLSessionFactory(SQLSessionFactory是县城安全的)
- SQLSessionFactory的实力直接开启一个SQLSession,在通过SqlSession实例获取Mapper对象并运行Mapper映射的SQL语句,完成对数据库的CRUD和事务提交,之后关闭SQLSession。
- sqlSession是单线程对象,因为是非线程安全的,是持久化操作的独享对象,类型JDBC的Connection,底层封装了JDBC链接。
2.详细流程
- 加载Mybatis全局配置文件(数据源,Mapper映射文件等),解析配置文件,Mybatis基于XML配置文件生成Configuration,和一个个MappedStatement(包括参数映射配置,动态SQL语句,结果映射配置),其对应着select|update|delete|insert标签项
- SQLSessionFactoryBuilder通过Configuration对象生成SQLSessionFactory,用来开发SqlSession。
- SqlSession对象完成和数据的交互:
- 用户程序调用Mybatis接口层api
- SqlSession通过调用api的StatementID找到对应的MappeedStatement对象
- 通过Executor将mappedStatement对象进行解析,SQL参数转化,动态SQL拼接,生成JDBC statement对象
- JDBC执行SQL
- 借助MappedStatement中的结果映射关系,将返回结果转化成HashMap,JavaBean等存储结构并返回
接口层
- Mybatis将配置文件中的每一个节点抽象为一个Mapper接口。Mybatis的配置规范配置好后,通过SqlSession.getMapper(xxxMapper.class)方法,Mybatis会根据相应的接口信息,通过动态代理机制生成Mapper实例,确定StatementID,底层通过SqlSession.select(“statementId”, parameterOject)等来实现对数据库的操作。
数据处理层
- 通过传入参数构建动态SQL语句
- Mybatis通过传入的参数值,使用Ognl来动态构造SQL语句
- SQL语句的执行以及封装查询结果
框架支撑层
- 事物管理机制??
- 连接池管理机制??
- 缓存机制??
- SQL语句配置方式??
3.Mybatis的主要构建及其相互关系
- SqlSession:表示和数据库交互的会话,完成对数据库的CRUD
- Executor:执行器,Mybatis的调度核心,负责SQL语句的生成和查询缓存的维护
- StatementHandler:封装JDBC Statement操作,设置参数,将Statement结果集装换成List集合
- ParameterHandler:负责对用户传递的参数转换成JDBC Statement所需参数
- ResultSetHandler:负责将JDBC返回的ResultSet结果集对象转换成List类型集合
- TypeHander:负责Java数据类型和jdbc数据类型之间的映射和转换
- MappedStatement:维护一条select|update|delete|insert节点的封装
- SQLSource:负责根据用户的parameterObject,动态生成SQL语句,将信息封装到BoundSQL对象中,并返回
- BoundSQL:动态生成SQL语句以及相应的参数信息
- Configuration:Mybatis所有的配置信息都绑定在该对象中