「这是我参与 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
中的四大内置对象分别为 Executor
、StatementHandler
、ParameterHandler
、ResultSetHandler
, 其功能如下图所示:
总结
本文介绍了 mybatis
的优缺点以及 mybaits
的执行流程和其中比较重要的四大内置对象。