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
@Builder
public 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
@Builder
public 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实现分页查询
@Configuration
public class MybatisPlusConfig {
@Bean
public 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> 实现我们自己的接口