MyBatis 和 MyBatisPlus 的比较
MyBatis
-
一个简单易学、没有第三方依赖的
数据访问框架
,封装了 JDBC 底层访问数据库的细节
。 -
解除 SQL 语句和程序代码的耦合,提供了 DAO 层(数据访问逻辑),
将业务逻辑和数据访问逻辑分离
(不会影响其他程序或数据库)。(必须这样,xml 文件就是要与数据访问接口相关联的) -
使用原生的 SQL 语句来完成数据访问
,可以用 xml 文件或注解的方式编写 SQL 语句,方便维护、优化和统一管理。 -
所有的 SQL 语句都是自己写的
,这导致过度依赖数据库的 SQL 语句,不同的数据库 SQL 语句有差异,数据库移植性差,同时编写 SQL 语句的工作量很大。 -
将查询到的数据进行存储时,支持
驼峰命名映射与 xml 文件设置对象和数据库字段映射
,有对象关系映射标签。 -
手动解析
实体关系映射转换为 MyBatis 内部对象,然后注入容器中进行操作。 -
不支持 Lambda 形式调用。
-
xml 文件编写 SQL 语句的方式,不适合方法重载,不支持 DAO 类的方法重载,因为 xml 标签中,id(id 对应 DAO 类的方法的名称) 唯一。
-
xml 文件提供了动态 SQL 标签,
支持编写动态 SQL
。
MyBatisPlus
-
一键移植
:MyBatisPlus 是在 MyBatis 的基础上进行扩展的、只做增强不做改变的 MyBatis 升级版
。(即:引入 MybatisPlus 不会对现有的 Mybatis 构架产生任何影响) -
依赖同样少
:仅依赖 MyBatis 和 MyBatis-Spring。 -
损耗小
:内置了基本的单表 CURD(增删查改)语句
,性能基本无损耗,面向对象操作。 -
通用 CRUD 操作
:内置的 CURD 方法是通用的泛型接口,DAO 类需要实现 BaseMapper接口,实体类需要序列化,Service 类同样有相应的泛型接口。(仅仅通过少量配置即可实现单表大部分 CRUD 操作
,更有强大的条件构造器,满足各类使用需求) -
自动解析
实体关系映射转换为 MyBatis 内部对象,然后注入容器中进行操作。 -
支持 Lambda 形式调用。
-
可以预防 SQL 注入
:内置 Sql 注入剥离器,有效预防Sql注入攻击。 -
多种主键策略:
支持多达 4 种主键策略(内含分布式唯一 ID 生成器)
,可自由配置,完美解决主键问题。 -
内置分页插件:
基于 Mybatis 物理分页
,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询。 -
内置性能分析插件:
可输出 SQL 语句以及其执行时间
,建议开发测试时启用该功能,能有效解决慢查询。 -
内置全局拦截插件:
提供全表 delete、update 操作智能分析阻断
,预防误操作。 -
实体类编写中:使用
@TableName(value=“table1”) 注解指定表名
。(必加) -
使用
@TableId(value=“idName”) 指定表主键
。(必加) -
使用
@TableField(value = "field") 指定表字段
,若字段与表中字段名保持一致可不加注解。 -
支持热加载
:Mapper 对应的 XML 支持热加载,对于简单的 CRUD 操作,甚至可以无 XML 启动。 -
支持 ActiveRecord
:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可实现基本 CRUD 操作。 -
支持代码生成
:采用代码或者 Maven 插件可快速生成 Mapper、Model、Service、Controller 层代码(生成自定义文件,避免开发重复代码),支持模板引擎、有超多自定义配置等。 -
支持
自定义全局通用操作
:支持全局通用方法注入(Write once, use anywhere)。 -
支持关键词自动转义
:支持数据库关键词(order、key…)自动转义,还可自定义关键词 。
总结
-
MyBatisPlus 是 MyBatis 的
升级版
,可以直接将 MyBatis 框架替换成 MyBatisPlus 框架
,代码无需改动即可运行
。(当然,想要使用 MyBatisPlus 的新功能就必须改动代码) -
MyBatisPlus 在 MyBatis 的不支持 Lambda 形式调用上改为:
支持 Lambda 形式调用
。 -
MyBatisPlus 在实体类配置中添加了:
@TableName(value=“”)、@TableId(value=“”)、@TableField(value = "")
三个注解,用来映射数据库表及表字段 与 实体类的关系
。 -
增加了:
主键策略(4 种)
、分页插件
、全局拦截插件(智能拦截 delete、update 操作)
、性能分析插件
等等。