Mybatis Plus的官方地址
- 官网地址:https://mp.baomidou.com/ or https://mybatis.plus/
- GitHub:https://github.com/baomidou/mybatis-plus
- 码云:https://gitee.com/baomidou/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中加入自定义的方法