【mybatis】mybatis框架(作用,事务,主要流程,插件)

使用mybatis的好处

  1. 只需要写好sql语句,无需关心一下点

    1. 数据库连接,资源释放问题

    2. 参数处理问题

    3. 结果集处理问题

  2. sql语句可以同一管理

  3. 提高sql语句的复用性

mybatis的主要工作流程

  1. 在容器启动的时候通过SqlSessionFactoryBean 创建SqlSessionFactoryBuilder对象

  2. SqlSessionFactoryBuilder

    • 将mybatis配置信息,数据库等信息,交给XmlConfigBuilder对象生成Configuration对象。

    • 根据Configuation对象创建DefaultSqlSessionFactory对象

  3. SqlSessionFactory : 主要是打开SqlSession对象,获取创建Environment,Executor对象创建DefaultSqlSession对象

  4. DefaultSqlSession : 该类中定义了很多数据库的操作(增删查改,提交,回滚等),负责与数据库的交互

    • 通过Configuration 对象解析sql语句信息生成MappedStatement 对象,该对象主要是保存sql语句信息

    • 将真正的对数据的操作交给 Executor对象

  5. Executor

    • 获取数据库的连接

    • 创建statementHandler对象

  6. StatementHandler对象获得数据库的Statement对象,由statement对象执行sql语句,并将结果交给 ResultSetHandler对象处理结果集,然后依次返回结果

  7.  

 

mybatis中的事务

  1. mybatis,spring框架中事务的实现方式

    1. 声明式事务:基于注解和配置文件,面向切面的方式实现(aop)

    2. 编程式事务:写代码在代码中处理事务

  2. 事务的实现步骤 (DataSourceTransactionManager)

    1. 获取事务 (doGetTransaction)

    2. 开始事务(doBegin) : 在设置了事务的方法的开始根据设置开启一个事务,关闭自动提交(在无事务的情况下,事务是自动提交的)

    3. 执行sql

    4. 提交事务(doCommit),或者在遇到异常的情况下回滚事务(rallBack)

mybatis插件(plugin)

  1. 概述:mybatis提供插件的功能,虽然叫做插件,其实是拦截器的功能(Interceptor)。

  2. 作用: 通过拦截器(Interceptor)对处理类(configuration 中规定只能对如下四种处理类进行拦截Executor,ParameterHandler,ResultHandler,StatementHandler),根据需求做特殊处理(改变mybatis提供的处理),期间插件(Plugin)会根据是否有拦截器来返回原对象或者代理类,由代理类判断是否需要执行过滤方法

  3. 相关接口、类、注解

    • Interceptor : intercept(拦截方法)、plugin(返回代理对象或者原对象的方法)、setProperties(获取配置文件的属性参数)

    • Plugin :warp

    • @Intercepts({@Signature(
          type = Executor.class,
          method = "update",
          args = {MappedStatement.class, Object.class}
      ), @Signature(
          type = Executor.class,
          method = "query",
          args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}
      )})
      以上注解指定了 该拦截器对哪个处理类(Executor)的哪个方法(update(MappedStatement arg1,Object arg2)、 query(MappedStatement arg1,RowBounds arg2,ResultHandler arg3))进行拦截

插件处理过程

  1. 项目初始化的时候,创建配置的拦截器(Interceptor)

    • 初始化SqlSessionFactoryBean时将插件信息(plugin)添加到Configuation中

    • Configuration 对象会把拦截器(Interceptor)加入拦截器链

  2. 在Configuration创建处理器时,会将处理器交给拦截链(InterceptorChain),拦截链是一个存放拦截器的List ,所以最后还是会将处理器交给拦截器(Interceptor)的plugin()方法来根据拦截链中是否存在拦截器来判断是返回原处理器(无),还是返回代理处理器对象(有)。

  3. 在调用执行被处理器过滤的方法(query、update等)的时候,如果上一步返回了代理处理器类,则会先调用拦截器的拦截方法(intercept)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值