Mybatis-Plus笔记
Mybatis-Plus
此版本为Mybatis-Plus(3.0.5)+Spring-Boot(2.6.3);新版本为Mybatis-Plus(3.0.5),SpringBoot不变
MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
- 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
- 损耗小:启动即会自动注入基本 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 操作智能分析阻断,也可自定义拦截规则,预防误操作
快速开始
1.创建数据库mybatis-plus
2.新建User表
1 | DROP TABLE IF EXISTS user; |
3.编写项目。初始化项目,springboot
4.配置数据库源
5.pom.xml
1 | <properties> |
…….省略
配置日志
1.配置文件添加
1 | mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl |
CRUD扩展
简单操作不用再写sql,直接使用mybatis-plus封装的方法即可完成简单的crud操作。
Mapper继承BaseMapp
CRUD测试
1 |
|
主键生成策略
雪花算法:
snowflake ………
实体类 @TableId(type = IdType.ID_WORKER) :全局唯一ID; @TableId(type = IdType.AUTO):自增
其他源码解释
1
2
3
4
5
6
7
8public enum IdType {
AUTO(0), //数据库自增id
NONE(1), //未设置主键
INPUT(2), //手动输入
ID_WORKER(3), //默认得全局唯一id
UUID(4), //全局唯一id uuid
ID_WORKER_STR(5); //字符串表示法
}
自动填充
创建时间,修改时间!都是自动完成填充.
阿里巴巴开发手册:所有数据库:gmt_create , gmt_modified几乎所有表要具备,而且自动化.
方式一:数据库级别
1.在表中新增字段create_time,update_time;配置默认值
2.再次新增
1
2 private Date createTime;
private Date updateTime;
方式二:代码级别
1.删除数据库默认值
2.实体类添加注解
1 | //字段添加填充内容 |
3.编写处理器来处理这个注解
1 |
|
乐观锁
其实是一种概念。
乐观锁:认为不会出现问题,无论做什么都不上锁,如果出了问题,再上锁去操作;比如一个心很大得人
悲观锁:认为做什么都会出现问题,无论干什么都会上锁,再去操作;比如一个很谨慎的人
乐观锁机制!
实现方式
取出记录时,获取当前version
更新时,带上这个version
执行更新时, set version = newVersion where version = oldVersion
如果version不对,就更新失败
1 | 乐观锁:1.先查询,获取版本号 version=1 |
测试MP的乐观锁插件
1.数据库添加version
2.实体类添加字段及注解
1 | //乐观锁version注解 |
3.添加乐观锁插件
1 |
|
4.测试
1 | //测试乐观锁成功 |
version:作为乐观锁的一种条件限制;
1 | 如上乐观锁失败执行的sql日志: |
查询操作
1 | //测试查询 |
分页查询
1.原始的limit进行分页
2.pageHelpere第三方插件
3.MP其实内置了分页插件
如何使用
1.配置分页拦截器主键
1 |
|
2.直接使用Page对象
1 | //测试分页查询 |
删除操作
1 | //批量删除 |
逻辑删除
物理删除:从数据库中直接移除
逻辑删除:在数据库中没有被移除,而是通过一个变量让他失效! deleted=0=>deleted=1
1.表中添加deleted字段
2.实体类添加字段
1 | //逻辑删除 |
3.配置
1 | //逻辑删除配置 |
1 | #逻辑删除配置 |
说明:
只对自动注入的sql起效:
- 插入: 不作限制
- 查找: 追加where条件过滤掉已删除数据,且使用 wrapper.entity 生成的where条件会忽略该字段
- 更新: 追加where条件防止更新到已删除数据,且使用 wrapper.entity 生成的where条件会忽略该字段
- 删除: 转变为 更新
例如:
- 删除:
update user set deleted=1 where id = 1 and deleted=0
- 查找:
select id,name,deleted from user where deleted=0
SQL性能分析打印插件
旧版
1.导入插件
1 | /** |
最好只在SpringBoot中配置环境为dev或者test使用!提高开发效率
新版
1.添加依赖
1 | <!-- sql打印分析--> |
2.application.yml配置
数据库配置修改:
1 | #修改前 |
3.创建spy.properties文件
1 | #3.2.1以上使用 |
条件查询Wrapper
用来写一些复杂的sql
1.测试一
1 | //查询name不为空,email不为空,age大于等于20 |
2.测试二
1 |
|
3.测试三
1 |
|
4.测试四
1 |
|
5.测试五
1 |
|
代码生成器
AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。
1 | package com.my.mybatis_plus; |
写于日期:2022-2-22 16:41