MyBatis-Plus简介和原理解析

MyBatis-Plus简介和原理解析

简介:

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。

特性:

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
  • 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
  • 内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

支持数据库:

  • mysql 、 mariadb 、 oracle 、 db2 、 h2 、 hsql 、 sqlite 、 postgresql 、 sqlserver 、 presto
  • 达梦数据库 、 虚谷数据库 、 人大金仓数据库

框架结构:

Mybatis-Plus的SQL语句组拼原理:

版本:
com.baomidou
mybatis-plus-boot-starter
3.1.2

首先在test类中selectById()方法下打个断点

在断点显示的值栏找到相关的SQL
发现SQL语句在MappedStatement对象中,而sqlSource存的就是相关的sql语句

然后在MappedStatement这个对象打断点,看看到底是哪个对象对它进行了操作

发现是AbstractMethod创建了MappedStatement

在AbstractMethod对象找到与addSelectMappedStatementForTable相关的一个方法,打断点

进入sql的组拼过程

最后SQL全部完成组拼,存在集合对象中执行sql

小结:
Configuration: MyBatis 或者 MyBatisPlus全局配置对象。
MappedStatement:一个 MappedStatement 对象对应 Mapper 配置文件中的一个。 select/update/insert/delete 节点,主要描述的是一条 SQL 语句。
SqlMethod : 枚举对象 ,MyBatisPlus支持的 SQL 方法。
TableInfo:数据库表反射信息 ,可以获取到数据库表相关的信息。
SqlSource: SQL 语句处理对象。
MapperBuilderAssistant: 用于缓存、SQL 参数、查询方剂结果集处理等。通过 MapperBuilderAssistant 将每一个 mappedStatement 添加到onfiguration 中的 mappedstatements 中。