MyBatis-plus
MyBatis vs JPA
MyBatis 与 JPA 是 Java 中最出名的两个持久化层框架,
新的改变
- MyBatis 优势和劣势
优势:
- SQL 语句可以*控制, 更灵活, 性能较高(性能比 JPA 高)。
- SQL 与代码分离, 易于阅读和维护。
SQL 是写到 XML 中, 它与 Java 代码进行了分离, 易于阅读, 代码非常清
晰。 - 提供 XML 标签, 支持编写动态 SQL 语句。
在 xml 中可以通过 xml 标签如 if 等标签编写动态的 SQL 语句。
劣势: - 简单的 CRUD 操作还是写 SQL 语句
- XML 中有大量的 SQL 要维护
业务越复杂, 需要编写的 SQL 语句越多。
- JPA 优势和劣势
- JPA 移植性比较好, 可以使用 JPQL 语句。
移植性比较好是指: 在都是使用 JPQL 语句的项目中, 当数据库发生改变,
我们只 要修改 application.properties 数据库配置文件, 其他代码是不要进行修
改。 - 提供了很多 CRUD 方法、 开发效率高。
它是面向对象的操作, 是真正意义上的 ORM 框架。
那么有没有一种框架, 既有 MyBatis 的种种优势, 又有 JPA 的种种优势呢?
那就是 MyBatis-Plus
MP 简介
MyBatis-Plus(下面简称 MP) 是一个 MyBatis 的增强框架, 只做增强不做改
变, 即原来的 MyBatis 用法还是有效, 如果需要, 你可以在项目中混合使用 MyBatis
和 MP。
文档及项目地址
官方地址: https://mybatis.plus/
在 github 的源码地址: https://github.com/baomidou/mybatis-plus
在码云的源码地址: https://gitee.com/baomidou/mybatis-plus
框架结构
特性介绍
- 无侵入、 损耗小、 强大的 CRUD 操作。
无侵入: 前面讲的是 MP 是只增强不改变, 引入它是不会对 MyBatis 进
行影响。
损耗小: 启动项目时, 就会进行注入, 所以基本是无损耗的。
强大的 CRUD 操作: 它内置了通用的 Mapping、 通用 Service, 通过少量
配置就可以 实现对单表的 CRUD 操作。 - 支持 Lambda 形式调用、 支持多种数据库。
- 支持主键自动生成、 支持 ActiveRecord 模式。
- 支持自定义全局通用操作, 支持关键词自动转义。
- 内置代码生成器、 内置分页插件、 内置性能分析插件
- 内置全局拦截插件、 内置 SQL 注入剥离器
2.3.3 Lombok 简介和安装
- Lombok 简介
Lombok 是一个 IDE 的插件, 可以对编译器进行增强, 使 Java 代码变得简洁、
快速。 - Eclipse 中安装 Lombok 插件
- 进入 Maven 仓库下载 lombok 的 jar 包
- IDEA 中安装 lombok 插件
- 打开ideaFileSettingPluginMarkplace输入Lombok回车进行搜索
常用案例
- @Data 注解在类上, 会为类的所有属性自动生成 setter/getter、 equals、
canEqual、 hashCode、 toString 方法, 如为 final 属性, 则不会为该属性生成 setter
方法. - @Getter/@Setter 在属性上, 生成对应属性的 get 和 set 方法。
- @NonNull 注解用在属性或构造器上, Lombok 会生成一个非空的声明, 可用
于校验参数, 能帮助避免空指针 - @Cleanup 注解能帮助我们自动调用 close()方法, 很大的简化了代码, 比如对
于 Connection、 InputStream 等 - @EqualsAndHashCode 默认情况下, 会使用所有非静态(non-static) 和非瞬态
(non-transient) 属性来生成 equals 和 hasCode, 也能通过 exclude 注解来排除一
些属性。 - @ToString 类使用@ToString 注解, Lombok 会生成一个 toString()方法, 默认情
况下, 会输出类名、 所有属性(会按照属性定义顺序) , 用逗号来分割。 通过将
includeFieldNames 参数设为 true, 就能明确的输出 toString()属性。
常见问题
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
TYPE | ASCII | HTML |
---|---|---|
Single backticks | 'Isn't this fun?' |
‘Isn’t this fun?’ |
Quotes | "Isn't this fun?" |
“Isn’t this fun?” |
Dashes | -- is en-dash, --- is em-dash |
– is en-dash, — is em-dash |