MyBatis 优势

  • SQL 语句可以自由控制, 更灵活, 性能较高
  • SQL 与代码分离, 易于阅读和维护
  • 提供XML标签, 支持编写动态SQL 语句

MyBatis 劣势

  • 简单的CRUD操作也需要写SQL语句
  • XML 中有大量SQL维护
  • MyBatis 自身功能优先, 但支持 Plugin

JPA 优势

  • JPA 移植性比较好, 切换数据库只需要切换数据源即可
  • 提供了很多 CRUD 的方法,开发效率高
  • 对象化程度更高

MyBatis-Plus
MP 是一个 MyBatis 增强工具, 只做增强, 不做改变
MyBatis Plus 介绍
image.pngimage.png
特点介绍

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 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 操作智能分析阻断,也可自定义拦截规则,预防误操作

    常见注解

    常用注解介绍

  • @TableName(“val”) 指定实体类和表名的对应

  • @TableId(value=””,type=IdType.ASSIGN_ID) 指定表中的主键以及主键策略
  • @TableField(value=””) 指定属性和表字段的对应

    排除非字段的三种方式

  1. 字段用 transient关键字修饰
  2. 使用 static 关键字修改时
  3. 使用注解 @TableField(exist=false)

    通用 Mapper

    BaseMapper 普通查询

    T selectById(Serializable id) 根据 ID 查询
    selectBatchIds 根据 ID 集合查询多条数据
    selectByMap(Map columnMap) 根据 字段为key , 条件为 value 查询; map key 是表字段

    BaseMapper 条件查询

  4. QueryWrapper 条件必须是表字段

  5. LambdaQueryWrapper 条件是 JavaBean 属性

条件:
like likeRight likeLeft eq ne lt le gt ge or and orderByAsc orderByDesc isNotNull

image.pngimage.png

  1. queryWrapper.like(Category::getName, "").and(c -> c.le(Category::getId, "").or().isNotNull(Category::getIcon));

image.png
image.png

通用 Service