MyBatis-Plus
概述
- MyBatis:简化JDBC操作
- MyBatis-Plus:简化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 操作智能分析阻断,也可自定义拦截规则,预防误操作
快速入门
地址:https://baomidou.com/guide/quick-start.html
说明:我们使用mybatis-plus可以节省我们大量代码,尽量不要同时导入mybatis和mybatis-plus
1 | jdbc:mysql://localhost:3306/mybatis_plus?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8 = |
- pojo
- mapper接口
- 使用
配置日志
查看sql如何执行需要看日志
后面的学习需要注意自动生成的sql
CRUD扩展
插入操作
1 |
|
主键生成策略
默认ID_WORKER全局唯一id
雪花算法
主键自增
我们需要配置主键自增
- 实体类加上
@TableId(type = IdType.AUTO)
- 数据库加上主键自增
其余的源码解释
1 | AUTO(0),//数据库id自增 |
更新操作
1 |
|
自动填充
创建时间、修改时间
方式一:数据库级别
方式二:代码级别
1 |
|
1 | package com.dogegg.mybatis_plus.handler; |
乐观锁
面试经常会问到乐观锁,悲观锁
乐观锁:总是认为不会出现问题,无论干什么都不会上锁。如果出现问题,再次更新值处理
悲观锁:总认为会出现问题,无论干什么都会上锁,再去操作
乐观锁实现方式:
- 取出记录时,获取当前version
- 更新时,带上这个version
- 执行更新时, set version = newVersion where version = oldVersion
- 如果version不对,就更新失败
给数据库增加version字段
实体类加对应字段
1 |
|
注册组件
1 |
|
测试
1 |
|
查询操作
删除操作
逻辑删除
物理删除:从数据库中直接移除
逻辑删除:在数据库中没有被移除,而是通过变量来让他失效
管理员可以查看被删除的记录。防止数据的丢失,类似于回收站
测试一下
在数据表中增加deleted字段
实体类中增加属性
1
2
private Integer deleted;配置
1
2
3
4
public ISqlInjector sqlInjector() {
return new LogicSqlInjector();
}1
21 =
0 =删除数据
记录依旧在数据库,但是值改变
性能分析插件
平时会碰到慢sql
作用:分析每条sql执行时间
MP也提供性能分析插件没如果超过时间就停止运行
导入插件
1
2
3
4
5
6
7
8
public PerformanceInterceptor performanceInterceptor() {
PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
performanceInterceptor.setMaxTime(100);
performanceInterceptor.setFormat(true);
return performanceInterceptor;
}要在SpringBoot中配置环境为dev或test
测试使用
使用性能分析插件能帮助我们提高效率
条件构造器
十分重要:Wrapper
我们要写一些复杂的sql就可以使用它来代替
代码自动生成器
代码自己编写完成