TypeHandler负责java数据类型和jdbc数据类型之间的映射和转换
MappedStatementMappedStatement维护了一条<select|update|delete|insert>节点的封装,
SqlSource负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返回
BoundSql表示动态生成的SQL语句以及相应的参数信息
ConfigurationMyBatis所有的配置信息都维持在Configuration对象之中。
(注:这里只是列出了我个人认为属于核心的部件,请读者不要先入为主,认为MyBatis就只有这些部件哦!每个人对MyBatis的理解不同,分析出的结果自然会有所不同,欢迎读者提出质疑和不同的意见,我们共同探讨~)
它们的关系如下图所示:

1. 准备数据,创建EMPLOYEES表,插入数据:
2. 配置Mybatis的配置文件,命名为teaboymybatis.xml:
3. 创建Employee实体Bean 以及配置Mapper配置文件EmployeesMapper.xml
4. 创建eclipse 或者myeclipse 的maven项目,maven配置如下:
5. 客户端代码:
跟进去看DefaultSqlSessionFactory类中的openSessionFromDataSource方法:
跟进去看getTransactionFactoryFromEnvironment方法:获取TransactionFactory
跟进去看JdbcTransactionFactory类中的newTransaction方法:
跟进去看Configuration里面的newExecutor方法:
这里走SimpleExecutor类,通过父类BaseExecutor的构造方法构造一个SimpleExecutor,源码如下:
然后代码执行executor = new CachingExecutor(executor, autoCommit);方法,通过父类BaseExecutor的构造方法构造一个SimpleExecutor,源码如下:
从上面的代码可以看出,创建Transaction事务,一次配置加载有且对应一个数据源。mybatis原理最后通过下面构造方法拿到DefaultSqlSession,sqlSession
在看看DefaultSqlSession到底干了什么事情? MyBatis封装了对的访问,把对的会话和事务控制放到了SqlSession对象中。

上述的"Employee.selectByMinSalary",是配置在EmployeesMapper.xml的Statement ID,params 是传递的查询参数。
让我们来看一下sqlSession.selectList()方法的定义:
MyBatis在初始化的时候,会将MyBatis的配置信息全部加载到内存中,使用org.apache.ibatis.session.Configuration实例来维护。使用者可以使用sqlSession.getConfiguration()方法来获取。MyBatis的配置文件中配置信息的组织格式和内存中对象的组织格式几乎完全对应的。上述例子中的加载到内存中会生成一个对应的MappedStatement对象,然后会以key="Employee.selectByMinSalary",
value为MappedStatement对象的形式维护到Configuration的一个Map中。当以后需要使用的时候,只需要通过Id值来获取就可以了。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-40255-3.html
教授本是代表了文化
不是秀肌肉的问题
还有歼-10