Mybatis的简单运行流程

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信息配置
SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境全局配置参数(全局配置参数,别名定义,加载属性文件,数据库配置信息,加载映射文件等信息)
mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。
 
2、 首先通过ClassLoader加载mybatis核心配置文件(数据库连接信息等)加载到输入流里面,
SqlSessionFactory通过输入流构建SessionFactory和Configuration对象。
 
3、  通过SessionFactory会话工厂负责创建sqlSession会话,并且把事务,执行器类型信息等放到执行器Executor里面,返回一个SqlSession对象,操作数据库需要通过sqlSession进行.
 

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

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员阿军

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值