MyBatis-plus

MyBatis vs JPA

MyBatis 与 JPA 是 Java 中最出名的两个持久化层框架,

新的改变

  1. MyBatis 优势和劣势
    优势:
  1. SQL 语句可以*控制, 更灵活, 性能较高(性能比 JPA 高)。
  2. SQL 与代码分离, 易于阅读和维护。
    SQL 是写到 XML 中, 它与 Java 代码进行了分离, 易于阅读, 代码非常清
    晰。
  3. 提供 XML 标签, 支持编写动态 SQL 语句。
    在 xml 中可以通过 xml 标签如 if 等标签编写动态的 SQL 语句。
    劣势:
  4. 简单的 CRUD 操作还是写 SQL 语句
  5. XML 中有大量的 SQL 要维护
    业务越复杂, 需要编写的 SQL 语句越多。
  1. JPA 优势和劣势
  1. JPA 移植性比较好, 可以使用 JPQL 语句。
    移植性比较好是指: 在都是使用 JPQL 语句的项目中, 当数据库发生改变,
    我们只 要修改 application.properties 数据库配置文件, 其他代码是不要进行修
    改。
  2. 提供了很多 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

框架结构

MyBatis-plus

特性介绍

  1. 无侵入、 损耗小、 强大的 CRUD 操作。
    无侵入: 前面讲的是 MP 是只增强不改变, 引入它是不会对 MyBatis 进
    行影响。
    损耗小: 启动项目时, 就会进行注入, 所以基本是无损耗的。
    强大的 CRUD 操作: 它内置了通用的 Mapping、 通用 Service, 通过少量
    配置就可以 实现对单表的 CRUD 操作。
  2. 支持 Lambda 形式调用、 支持多种数据库。
  3. 支持主键自动生成、 支持 ActiveRecord 模式。
  4. 支持自定义全局通用操作, 支持关键词自动转义。
  5. 内置代码生成器、 内置分页插件、 内置性能分析插件
  6. 内置全局拦截插件、 内置 SQL 注入剥离器

2.3.3 Lombok 简介和安装

  1. Lombok 简介
    Lombok 是一个 IDE 的插件, 可以对编译器进行增强, 使 Java 代码变得简洁、
    快速。
  2. Eclipse 中安装 Lombok 插件
  1. 进入 Maven 仓库下载 lombok 的 jar 包
  1. IDEA 中安装 lombok 插件
  1. 打开ideaFileSettingPluginMarkplace输入Lombok回车进行搜索

常用案例

  1. @Data 注解在类上, 会为类的所有属性自动生成 setter/getter、 equals、
    canEqual、 hashCode、 toString 方法, 如为 final 属性, 则不会为该属性生成 setter
    方法.
  2. @Getter/@Setter 在属性上, 生成对应属性的 get 和 set 方法。
  3. @NonNull 注解用在属性或构造器上, Lombok 会生成一个非空的声明, 可用
    于校验参数, 能帮助避免空指针
  4. @Cleanup 注解能帮助我们自动调用 close()方法, 很大的简化了代码, 比如对
    于 Connection、 InputStream 等
  5. @EqualsAndHashCode 默认情况下, 会使用所有非静态(non-static) 和非瞬态
    (non-transient) 属性来生成 equals 和 hasCode, 也能通过 exclude 注解来排除一
    些属性。
  6. @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