MyBatis学习初整理

宏观上了解Mybatis整体框架分为三层,分别是基础支持层,核心处理层,接口层

接口层:           SqlSession   

                          描述:SqlSession是上层应用和Mybatis打交道的桥梁,SqlSession上定义了非常多的对数据库的操作方法。接口层在接收到调用请求时,会调用核心处理层的相应模块来完成具体的数据库操作

核心处理层:    配置解析、参数映射、SQL解析、SQL执行、结果集映射、插件

                          描述:与数据库操作相关的动作都是在这一层完成的

                                     1:把接口中传入的参数解析并且映射成JDBC类型

                                     2:解析xml文件中的SQL语句,包括插入参数和动态生成SQL

                                     3:执行SQL语句

                                     4:处理结果集,并映射程Java对象

                                     5:插件也属于核心层,这是由它的工作方式和拦截的对象决定的

基础支持层:     数据源模块、事务模块、缓存模块、Bingding模块、反射模块、类型转换模块、日志模块、资源加载、解析器模块

                            描述:主要是一些抽取出来的通过功能,用来支持核心处理层的功能。如数据源、缓存、日志、xml解析、反射、IO、事务等功能

主要工作流程:

Configuration、mybatis-config.xml、Mapper.xml   >>  SqlSessionFactory  >>  SqlSession >> Executor >>  StatementHandler  >> 映射参数的输入 AND >> 映射的输出参数  >> DB

核心对象的生命周期:SqlSessionFactoryBuiler、SqlSessionFactory、SqlSession、Mapper

SqlSessionFactoryBuilder:用来构建SqlSessionFactory,而SqlSessionFactory只需要一个,所以只要构建了一个SqlSessionFactory,它就没有存在的意义了,所以它的生命周期只存在于方法的局部

SqlSessionFactory:用来创建SqlSession的,每次应用程序访问数据库,都需要创建一个会话。因为一直有创建会话的需要,所以SqlSessionFactory应该存在于应用的整个生命周期中(作用域是应用作用域)。创建SqlSession只需要一个实例就可以,否则会产生混乱和资源浪费。所有采用单例模式。

SqlSession:SqlSession是一个会话,因为它不是线程安全的,不能在线程间共享。所以我们在请求开始的时候创建一个SqlSession对象,在请求结束或者方法执行完毕时要及时关闭它(一次请求或者操作中)

Mapper: 实际上是一个代理对象,从SqlSession中获取。作用是发送SQL来操作数据库的数据。它应该在一个SqlSession事务方法之内

                 TestMapper mapper = sqlSession.getMapper(TestMapper.class);

流程:SqlSessionFactoryBuilder(方法局部 method) >>  SqlSessionFactory(应用级别 application) >> SqlSession(请求和操作 request/method) >> Mapper(方法 method)

MyBatis核心对象

对象                    相关对象                                                                                        作用

Configuration     MapperRegistry、TypeAliasRegistry、TypeHandlerRegistry        包含了MyBatis的所有配置信息

SqlSession        SqlSessionFactory、DefaultSqlSession                                         对操作数据库的增删改查的API进行了封装,提供给应用层调用

Executor            BaseExecutor、SimpleExecutor、BatchExecutor、ReuseExecutor MyBaits执行器,是MyBatis调度的核心,负责SQL语句的生成和查询缓存的维护

StatementHandler  BaseStatementHandlder、SImpleStatementHandler、PrepareStatementHandler、CallableStatementHandler       封装了JDBC Statement操作,负责对JDBC Statement的操作,如设置参数,将Statement结果集转换成List集合

ParmeterHandler     DefaultParameterHandler                     把用户传递的参数转换成JDBC Statement 所需要的参数

ResultSetHandler    DefaultResultSetHandler                       把JDBC返回的ResultSet结果集对象转换成List类型的集合

MapperProxy           MapperProxyFactory                             触发管理类,用于代理Mapper接口方法

MapperStatement    SqlSource、BoundSql                           MappedStatement维护了一条<select | update | delete | insert>节点的封装,表示一条SQL包括了SQL信息、入参信息、出参信息

           

MyBatis整合Spring原理

MyBatis集成到Spring,是为了进一步简化MyBatis的使用,所以只是对MyBatis做了一些封装,并没有替换MyBatis的核心对象。MyBatis.jar中的SqlSessionFactory、SqlSession、MapperProxy等这些类都会用到,mybatis-spring.jar只是做了一些包装或者桥梁的工作。

MyBatis设计模式

工程模式    SqlSessionFactory、ObjectFactory、MapperProxyFactory

建造者模式 XMLConfigBuilder、XMLMapperBuilder、XMLStatementBuilder

单例模式     SqlSessionFactory、Configuration、ErrorContext

代理模式     绑定:MapperProxy、延迟加载:ProxyFactory、插件:Plugin                                                       Spring集成MyBatis:SqlSessionTemplate、自带连接池:PooledConnection、                               日志打印:ConnectionLgger、StatemengLogger

适配器模式  Log,对于Log4j、JDK logging这些没有直接实现slf4j接口的日志组件,需要适配器

模板方法     BaseExecutor、SimpleExecutor、BatchExecutor、ReuseExecutor

装饰器模式  LoggingCache、LruCache对PerpetualCacheCachingExecutor对其他Executor

责任链模式  Interceptor、InterceptorChain

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值