Mybatis Plus的官方地址

Mybatis Plus版本选择:

  • 3.0.7本身及以后的版本,支持自定义sql使用MP的条件构造器:${ew.customSqlSegment}
  • 支持lambda表达式条件构造器链式编程
  • 3.1.1以后的版本需要的jdbc驱动版本为4.2,对应的durid数据源版本为1.1.21及以上,mysql驱动版本为8.x以上

Mybatis Plus特性:

  • 侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 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、Postgre、SQLServer 等多种数据库
  • 内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

Mybatis Plus通用Mapper的方法相关知识

  • testMapper继承BaseMapper<T>
  • Create:基于雪花算法的自增id
  • insert
  • Select: 
  • selectById:根据id进行查询
  • selectBatchIds:将多个id封装到一个集合中,进行多个id查询
  • selectByMap:map中的key存的是数据库中的列,将查询条件封装到map中,进行条件查询
  • selectOne:查询单挑数据
  • selectCount:查询总记录数
  • selectList:传入Wrapper,QueryWrapper实现类中有各种与条件查询相关的方法,传入的都是数据库中的列
  • selectMaps:返回值是 List<Map<String, Object>>,查询结果是列名和对应的值
  • selectObjs:返回值是List<Object>,查询结果只有第一列的值
  • mybatis plus 3.0.7版本后支持自定义sql使用条件构造器(wrapper),并且lambda条件构造器支持更多写法,lambda条件构造器可以有效避免键入字段错误
  • selectPage:传入Ipage对象和Wrapper对象,返回IPage<T>(需配置分页插件PaginationInterceptor对象到Spring容器中)
  • selectMapsPage:传入Ipage对象和Wrapper对象,IPage<Map<String, Object>>
  • Update
  • updateById:传入实体,实体必须有id
  • update:传入实体(要改变的字段进行设值),传入Wrapper(更新需要的条件)
  • Delete
  • deleteById:传入要删除数据的id
  • deleteByMap:map中的key存的是数据库中的列,将查询条件封装到map中,进行按条件删除
  • deleteBatchIds:将多个id封装到一个集合中,进行多行删除
  • delete:传入Wrapper

ActiveRecord 模式(活动记录):通过实体类的对象直接进行表的增删改查操作

  • 实体类extends Modle<T>
  • 实体类调用Modle中的方法,例如:insertOrUpdate

主键策略

  • AUTO、NONE、INPUT、ID_WORKER、UUID、ID_WORKER_STR

基本配置

通用Service

  • testService继承Iservice<T>,testServiceImp继承ServiceImpl<testMapper,T>实现testService
  • 主要处理批量数据的增删改查
  • 支持lambda链式调用方法

Mybatis Plus高级应用

逻辑删除

  • mybatis-plus.global-config.db-config.logic-not-delete-value: 全局设置逻辑未删除默认值
  • mybatis-plus.global-config.db-config.logic-delete-value: 全局设置逻辑已删除默认值
  • 3.1.10版本以后不需要写逻辑删除配置bean
  • 在代表逻辑删除的字段加注解@TableLogic
  • 在代表逻辑删除的字段加注解@TableField(select=false)可以在查询的时候不显示该字段
  • 自定义sql不会走做查询时不会受逻辑删除字段的影响,如果要使用逻辑字段,在条件构造器中自己进行构造

自动填充

  • 在自动填充字段上增加注解@TableField(fill=FieldFill.INSERT)或者@TableField(fill=FieldFill.UPDATE)
  • 自定义一个类实现MetaObjectHandler接口并注入到Spring容器中

乐观锁

  • 配置乐观锁插件,在配置文件中,将OptimisticLockerInterceptor对象配置到Spring容器中
  • 在记录版本的字段上加上@Version注解

性能分析插件

  • 配置性能分析插件,在配置文件中,将PerformanceInter对象配置到Spring容器中,仅在开发环境和测试环境运行

多租户SQL解析器

  • 配置分页插件,在配置文件中,将PaginationInterceptor对象到Spring容器中,将TenantSqlParser实现后写入PaginationInterceptor

动态表名SQL解析器

  • 也是写在分页插件中,DynamicTableNameParser对象实现后写入分页插件

SQL注入器

  • 创建定义方法的类继承AbstactMethod,重写方法
  • 创建注入器继承DefaultSqlInjector重写方法,将自定义方法加入sql注入器中
  • 在Mapper中加入自定义的方法