mybaits 的一些总结

189 阅读2分钟

「这是我参与 2022 首次更文挑战的第 18 天,活动详情查看:2022 首次更文挑战

一阴一阳之谓道。

前言

mybatis 是在项目中经常使用的 ORM 框架,对于经常做 CRUD 的我是非常熟悉的,一直都在说是面向对象编程,之前看到一个观点,其实使用 myabtis 的话,都是面向数据库编程的,因为一般的开发步骤是先根据业务需要抽象建模,数据库设计,代码设计,实现业务,没有一点儿面向对象的意思,倒是有人说 hibernate 是面向对象的,因为基本不用写 SQL,所有仁者见仁智者见智,今天讨论一下 mybatis 的一些内容。

mybatis 的优缺点

mybatis 的优点:

  • 1 基于 sql 语句实现数据的操作,操作比较灵活不会对应用程序或者数据库造成影响,sql 一般在 xxxMapper.xml 里面编写,解决了 sql 编写与程序代码的解耦,方便统一管理。另外 mybaits 提供了便捷的标签,支持编写动态 sql,可以实现 sql 的重复使用。
  • 2 与纯 jdbc 相比,减少了大量的与业务无关的代码,只需要关心相应的 sql 语句实现以及结果的映射即可。
  • 3 能够很好的与 spring 框架进行集成,对数据库的版本兼容性也很好。
  • 4 关于 mybaits 有很多的第三方插件,比如分页插件和逆向工程,减少了一些编码工作量。

mybaits 的缺点:

  • 1 在复杂的业务场景中 sql 语句的编写工作量比较大,尤其是在字段多、表关联多的情况下,对开发人员 sql 语句功底有一定的要求。
  • 2 sql 语句依赖于数据库,导致数据库的一致性比较差,不能随意更换数据库。

mybaits 的重要组件

Mybatis 底层封装了 JDBC, 使用动态代理模式,其入口为 MapperProxy ,在具体的执行 sql 层面使用的是 MapperMethod.execute 方法。

  • 1 扫描项目中的 config.xml 和 Mapper.xml 文件,进行解析生成 Configuration,框架中的所有数据都需要从中读取。
  • 2 SqlSessionFactoryBuilder 构造器生成 SqlSessionFactory ,SqlSessionFactory 是一个工厂方法,从中获取 SqlSession,即创建会话。
  • 3 从 Sqlsession 中获取执行器 Executor 去执行,根据 xml 中的映射规则解析 sql ,根据 ongl 做参数的映射生成最终的 sql 并执行。

Mybatis 中的四大内置对象分别为 ExecutorStatementHandlerParameterHandlerResultSetHandler, 其功能如下图所示:

总结

本文介绍了 mybatis 的优缺点以及 mybaits 的执行流程和其中比较重要的四大内置对象。