MP特性:
- 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
 - 损耗小:启动即会自动注入基本 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 操作智能分析阻断,也可自定义拦截规则,预防误操作
 
MP快速入门:
1、数据库环境准备2、创建SpringBoot工程,引入MyBatisPlus的启动器依赖
3、在yml中编写DataSource相关配置
4、编写mapper
5、测试
MP主键生成策略-@TableId
注解@TableId介绍
@TableId注解作用:    1.标识实体类中主键对应属性;
    2.定义主键生成策略;
@TableId使用:
    添加在实体类的主键对应的成员属性上即可;
主键生成策略
主键生成策略: 是指为数据库生成主键的方式,我们前面学的数据库主键自增也是一种生成主键的策略,当然除了数据库服务端帮助我们维护主键之外,客户端也可以对主键值进行生成维护。
// @TableName: 指定当前对象对应的数据库表@TableName("tb_user")@Data@NoArgsConstructor@AllArgsConstructor@Builderpublic class User {/*** @TableId: 指定当前表的主键* value: 建立数据库主键字段与实体字段的对应关系* type: 设置主键生成策略,* 默认情况下使用雪花算法* IdType.AUTO:使用数据库的主键自增*/@TableId(type = IdType.AUTO)private Long id;private String userName;private String password;private String name;private Integer age;private String email;}
MP常用主键生成策略:
| 生成策略 | 应用场景 | 特点 | 
|---|---|---|
| IdType.AUTO | 数据库主键自增(确保数据库设置了 主键自增 否则无效) | 1. 数据库主键自增(确保数据库设置了 主键自增 否则无效) 使用数据库自带的主键自增值; 2.数据库自增的主键值会回填到实体类中; 3.数据库服务端生成的;  | 
| IdType.ASSIGN_ID | 主键类型为number类型或数字类型String | 1.MP客户端生成的主键值; 2.生成的主键值是数字形式的字符串 3.主键对应的类型可以是数字类型或者数字类型的字符串 4.底层基于雪花算法,让数据库的唯一标识也参与id的生成运算,保证id在分布式环境下,全局唯一(避免id的主键冲突问题);  | 
| IdType.ASSIGN_UUID | 主键类型为 string(包含数字和字母组成) | 1.生成的主键值包含数字和字母组成的字符串; 2.注意事项:如果数据库中主键值是number类型的,可不可用  | 
普通列注解-@TableField
注解@TableField作用
1.通过@TableField(“表列名”) 指定映射关系 2.忽略某个字段的查询和插入 @TableField(exist = false)
// @TableName: 指定当前对象对应的数据库表@TableName("tb_user")@Data@NoArgsConstructor@AllArgsConstructor@Builderpublic class User {/*** @TableId: 指定当前表的主键* value: 建立数据库主键字段与实体字段的对应关系* type: 设置主键生成策略,* IdType.NONE/ASSIGN_ID:默认情况下使用雪花算法* IdType.AUTO:使用数据库的主键自增* ASSIGN_UUID:使用UUID生成一个全局唯一字符串*/@TableId(type = IdType.AUTO)private Long id;private String userName;private String password;// 建立数据库字段与实体字段的对应关系 @TableField("与数据库字段名对应")@TableField("t_name")private String name;private Integer age;// 忽略此字段@TableField(exist = false)private String email;
MP实现分页查询
@Configurationpublic class MybatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();PaginationInnerInterceptor paginationInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);// 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false// paginationInterceptor.setOverflow(false);// 设置最大单页限制数量,-1不受限制paginationInterceptor.setMaxLimit(-1L);interceptor.addInnerInterceptor(paginationInterceptor);return interceptor;}}
QueryWrapper常用API:
eq( ) :  等于 =ne( ) :  不等于 <>
gt( ) :  大于 >
ge( ) :  大于等于  >=
lt( ) :  小于 <
le( ) :  小于等于 <=
between ( ) :  BETWEEN 值1 AND 值2 
notBetween ( ) :  NOT BETWEEN 值1 AND 值2 
in( ) :  in
notIn( ) :not in
QueryWrapper模糊查询like
like(“表列名”,”条件值”);     作用:查询包含关键字的信息,底层会自动添加匹配关键字,比如:%条件值%likeLeft(“表列名”,”条件值”); 作用:左侧模糊搜索,也就是查询以指定条件值结尾的数据,比如:%条件值
likeRight(“表列名”,”条件值”);作用:右侧模糊搜索,也就是查询以指定条件值开头的数据,比如:条件值%
MybatisX插件:
基于MybatisX实现逆向工程



MybatisPlus:在Mybatis的基础上进行了封装,提供了一种快速使用Mybatis的方式.主要封装了单表的增删改查.使用方式:SpringBoot整合MybatisPlus搭建maven项目.继承SpringBoot的父工程导入MybatisPlus的启动器(包含了Mybatis的所有依赖)编写dao层XxxMapper 继承 BaseMapper<Xxx>Xxx类: 与数据库表对应@TableName("数据库表名")@TableId@TableField编写引导类:开启dao层的扫描MP常用API:deleteById(id)deleteBatchids(list)delete(Wrapper)delete(Map)insert(T)updateById(T) 根据id修改update(T,Wrapper) 根据条件修改selectById(id) 根据id查询selectList(Wrapper) 根据条件查询,如果没有条件则查询所有selectPage(page,Wrapper) 根据条件分页查询new Page<User>(current,size);=============================================================增删改:UpdateWrapper: 封装增删改的条件LambdaUpdateWrapper: 基于Lambda表达式增: insert(T)删:delete(Wrapper)deleteById(id)deleteBatchIds(collection)deleteByMap(map)改:updateById(T)update(T,Wrapper)查询:QueryWrapper: 封装增删改的条件LambdaQueryWrapper: 基于Lambda表达式selectById(id)selectByMap(map)selectList(Wrapper)selectCount(Wrapper)selectPage(page,Wrapper) : 需要先创建用于分页的拦截器selectOne(Wrapper)----------------------------------------------MybatisPlus封装Service层:Service层的接口继承 IService<T>Service层的实现类继承 ServiceImpl<XxxMapper,T> 实现我们自己的接口
