MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis。
MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
Mybatis通过xml或注解的方式将要执行的statement配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。
Mybatis可以向prepareStatement的输入参数进行映射,将查询结果灵活映射成java对象(输出映射)。
SqlSession 作为MyBatis工作的主要顶层API,表示和数据库交互的会话,完成必要数据库增删改查功能
Executor MyBatis执行器,是MyBatis 调度的核心,负责SQL语句的生成和查询缓存的维护
StatementHandler 封装了JDBC Statement操作,负责对JDBC statement 的操作,如设置参数、将Statement结果集转换成List集合。
ParameterHandler 负责对用户传递的参数转换成JDBC Statement 所需要的参数,
ResultSetHandler 负责将JDBC返回的ResultSet结果集对象转换成List类型的集合;
TypeHandler 负责java数据类型和jdbc数据类型之间的映射和转换
MappedStatement MappedStatement维护了一条<select|update|delete|insert>节点的封装,
SqlSource 负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返回
BoundSql 表示动态生成的SQL语句以及相应的参数信息
Configuration MyBatis所有的配置信息都维持在Configuration对象之中。
1、 进行mybatis信息配置
4.通过执行器executor调用基本执行器的接口BaseExecutor的query()方法去进行查询,在这里会根据传递的参数,调用getBoundSql方法,完成SQL语句的动态解析,生成BoundSql对象,供StatementHandler使用;并且调用createCacheKey()方法为查询创建缓存,来提高性能,
5,之后在此调用BaseExecutor接口的query()方法,先看缓存里面有没有数据没有数据直接进行调用queryFromDatabase()方法下一步查询。
5.,通过调用SimpleExecutor接口的doQuery()方法并且把MappedStatement,参数信息等传过去,进入到doQuery(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql)方法,此时先通过获得Connection连接创建Statement对象进行参数的设置。
6.最后StatementHandler调用SimpleStatementHandler接口的query()方法并且把Statement和ResultHandler当参数传过去,然后通过Statement去调用里面的statement.execute(sql)方法进行查询,然后通过handleResultSets将结果集转换成List<E>结果集并且返回一个集合数据。
一些相关信息类和接口:SqlSessionFactory
SqlSession
Executor
MappedStatement
StatementHandler