MyBatis是半自动的轻量级ORM框架,在项目中使用它可以帮助我们减少几乎全部的JDBC编码、参数设置以及获取结果的工作。
每个MyBatis应用的核心是SqlSessionFactory实例,SqlSessionFactory可以通过SqlSessionFactoryBuilder获取。SqlSessionFactoryBuilder通过加载XML配置文件或预先设置Configuration的方式来生成DefaultSqlSessionFactory,其中XML配置文件会被XMLConfigBuilder解析成Configuration对象。XML配置模式中有两个比较基础的标签,一个是environments中的environment与mappers中的mapper。MyBatis作为一个ORM框架帮助我们减少JDBC的编码,而JDBC的编码是需要连接数据库,在environment中可以配置事物管理(transactionManager)以及数据源(datasource)。在mapper中通过namespace映射自定义的数据库表接口,接口中的方法与MappedStatement关联,statementId就是方法名,因为需要保证id的唯一性,所以在同一个接口中不允许方法重载。
创建好SqlSessionFactory之后,我们就可以通过工厂来创建SqlSession。SqlSessionFactory提供了可以通过openSessionFromDataSource方法从数据源中得到DefaultSqlSession,通过传入statementId以及参数就可以调用前面映射好的MappedStatement,也可以通过getMapper得到映射的接口代理类,代理类通过JDK动态实现了接口中定义的方法,实现的逻辑根据接口映射中定义的入参、返回结果以及映射的SQL语句,通过调用JDBC编码实现参数设置以及返回结果封装功能。具体的实现涉及MyBatis四个核心组件,分别是Executor,StatementHandler,ParameterHandler,ResultSetHandler。
1. Executor负责执行MappedStatement2. StatementHandler负责创建PrepareStatement
3. ParameterHandler负责参数设置
4. ResultSetHandler负责获取结果并按定义的返回格式进行封装