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使用:
添加在实体类的主键对应的成员属性上即可;

主键生成策略

主键生成策略: 是指为数据库生成主键的方式,我们前面学的数据库主键自增也是一种生成主键的策略,当然除了数据库服务端帮助我们维护主键之外,客户端也可以对主键值进行生成维护。

  1. // @TableName: 指定当前对象对应的数据库表
  2. @TableName("tb_user")
  3. @Data
  4. @NoArgsConstructor
  5. @AllArgsConstructor
  6. @Builder
  7. public class User {
  8. /**
  9. * @TableId: 指定当前表的主键
  10. * value: 建立数据库主键字段与实体字段的对应关系
  11. * type: 设置主键生成策略,
  12. * 默认情况下使用雪花算法
  13. * IdType.AUTO:使用数据库的主键自增
  14. */
  15. @TableId(type = IdType.AUTO)
  16. private Long id;
  17. private String userName;
  18. private String password;
  19. private String name;
  20. private Integer age;
  21. private String email;
  22. }

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)

  1. // @TableName: 指定当前对象对应的数据库表
  2. @TableName("tb_user")
  3. @Data
  4. @NoArgsConstructor
  5. @AllArgsConstructor
  6. @Builder
  7. public class User {
  8. /**
  9. * @TableId: 指定当前表的主键
  10. * value: 建立数据库主键字段与实体字段的对应关系
  11. * type: 设置主键生成策略,
  12. * IdType.NONE/ASSIGN_ID:默认情况下使用雪花算法
  13. * IdType.AUTO:使用数据库的主键自增
  14. * ASSIGN_UUID:使用UUID生成一个全局唯一字符串
  15. */
  16. @TableId(type = IdType.AUTO)
  17. private Long id;
  18. private String userName;
  19. private String password;
  20. // 建立数据库字段与实体字段的对应关系 @TableField("与数据库字段名对应")
  21. @TableField("t_name")
  22. private String name;
  23. private Integer age;
  24. // 忽略此字段
  25. @TableField(exist = false)
  26. private String email;

MP实现分页查询

  1. @Configuration
  2. public class MybatisPlusConfig {
  3. @Bean
  4. public MybatisPlusInterceptor mybatisPlusInterceptor() {
  5. MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
  6. PaginationInnerInterceptor paginationInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
  7. // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false
  8. // paginationInterceptor.setOverflow(false);
  9. // 设置最大单页限制数量,-1不受限制
  10. paginationInterceptor.setMaxLimit(-1L);
  11. interceptor.addInnerInterceptor(paginationInterceptor);
  12. return interceptor;
  13. }
  14. }

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插件:

mybatis逆向工程工程生成
mybatisx-001.gif

基于MybatisX实现逆向工程

image-20210801164123943.png
image-20210801164703520.png
image-20210801165241818.png

  1. MybatisPlus:
  2. Mybatis的基础上进行了封装,提供了一种快速使用Mybatis的方式.
  3. 主要封装了单表的增删改查.
  4. 使用方式:
  5. SpringBoot整合MybatisPlus
  6. 搭建maven项目.继承SpringBoot的父工程
  7. 导入MybatisPlus的启动器(包含了Mybatis的所有依赖)
  8. 编写dao
  9. XxxMapper 继承 BaseMapper<Xxx>
  10. Xxx类: 与数据库表对应
  11. @TableName("数据库表名")
  12. @TableId
  13. @TableField
  14. 编写引导类:
  15. 开启dao层的扫描
  16. MP常用API:
  17. deleteById(id)
  18. deleteBatchids(list)
  19. delete(Wrapper)
  20. delete(Map)
  21. insert(T)
  22. updateById(T) 根据id修改
  23. update(T,Wrapper) 根据条件修改
  24. selectById(id) 根据id查询
  25. selectList(Wrapper) 根据条件查询,如果没有条件则查询所有
  26. selectPage(page,Wrapper) 根据条件分页查询
  27. new Page<User>(current,size);
  28. =============================================================
  29. 增删改:
  30. UpdateWrapper: 封装增删改的条件
  31. LambdaUpdateWrapper: 基于Lambda表达式
  32. 增: insert(T)
  33. 删:
  34. delete(Wrapper)
  35. deleteById(id)
  36. deleteBatchIds(collection)
  37. deleteByMap(map)
  38. 改:
  39. updateById(T)
  40. update(T,Wrapper)
  41. 查询:
  42. QueryWrapper: 封装增删改的条件
  43. LambdaQueryWrapper: 基于Lambda表达式
  44. selectById(id)
  45. selectByMap(map)
  46. selectList(Wrapper)
  47. selectCount(Wrapper)
  48. selectPage(page,Wrapper) : 需要先创建用于分页的拦截器
  49. selectOne(Wrapper)
  50. ----------------------------------------------
  51. MybatisPlus封装Service层:
  52. Service层的接口继承 IService<T>
  53. Service层的实现类继承 ServiceImpl<XxxMapper,T> 实现我们自己的接口