MyBatis-Plus
MyBatis-Plus简介
MyBatis-Plus简化开发,配置文件
特性
- 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
- 损耗小:启动即会自动注入基本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 操作智能分析阻断,也可自定义拦截规则,预防误操作
#支持数据库
mysql 、 mariadb 、 oracle 、 db2 、 h2 、 hsql 、 sqlite 、 postgresql 、 sqlserver
达梦数据库 、 虚谷数据库 、 人大金仓数据库
#框架结构
1.初体验
1.建立数据库,导入数据
2.导入对应的依赖
3.编写项目
- 配置数据库链接
# DataSource Config
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver #the name of driver
# schema: classpath:db/schema-h2.sql #excute this sql which is not needed here when start the project
# data: classpath:db/data-h2.sql #excute this sql is not needed here when start the project
url: jdbc:mysql://localhost:3306/th_jr_risk_ods?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
#jdbc:mysql://localhost:3306/th_jr_risk_ods? the address and the name of the database
#useSSL=false
#&useUnicode=true&characterEncoding=utf-8 support the chinese
#&serverTimezone=GMT%2B8 set the timezone for earth eight
username: root
password: test
- 编写实体类
package com.learning02.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private long id;
private String id_card;
private String name;
private String bank_card;
private String linkman_phone;
private long time_range;
private Date create_time;
private Date update_time;
}
- 编写接口继承BaseMapper即可!至此所有的CRUD都已经完成
package com.learning02.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.learning02.pojo.User;
import org.springframework.stereotype.Repository;
//There is no need to develop the evil CRUD any more,just herit an interface after use the mybatis-plus
@Repository
public interface userMapper extends BaseMapper<User>{
}
add MapperScan
package com.learning02;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.learning02.dao")
public class SpringbootMp02Application {
public static void main(String[] args) {
SpringApplication.run(SpringbootMp02Application.class, args);
}
}
- 测试使用即可
常用的crud操作,BaseMapper都已经完成封装,尤其是单表操作
- 增删改查
- 乐观锁
- 逻辑删除
- 自动填充
- 分析性能
- 主键策略生成
- 稍微复杂一点的只需要编写Wrapper条件构造器即可!
2.插入策略
插入
关于Id生成的一些策略(雪花算法)
逐渐策略问题,默认是雪花算法
1.自增策略
保证数据库是自增的
增加IDType未Auto
3.更新策略
扩展:自动填充
alibaba规范中:表格必须有id,gmt_create,gmt_modified三个字段
自动更新策略,两种级别
数据库级别(不建议)
代码级别
1.删除数据库更新默认值
2.代码编写
- List item
4.乐观锁
乐观锁:非常乐观,无论什么操作都不加锁(分布式环境怎么处理冲突呢)
悲观锁:非常不乐观,无论什么操作都枷锁(没有问题)
我们通常的方式就是增加一个乐观字段即可(version)
当更新一条记录的时候,希望这条记录没有被别人更新
乐观锁实现方式:
- 去除记录时,获取当前version【查询】old version=1
- 更新时,带上这个version【更新】
//thread num-01
- 执行更新时,set version=newVersion where version=oldVersion
- 如果version不对,就更新失败
MP对乐观锁进行了支持
1.添加version注解到字段上面
2.添加乐观锁插件
3.测试就自动带上了版本号
5.查询操作
6.删除delete
拓展:逻辑删除
逻辑删除:并不是真的从数据库删除,只是加了一个判断而已
物理删除:直接从数据库中删除数据
逻辑删除业务场景:
1.添加逻辑删除字段
2.添加注解
3.处理注解的插件
4.仅查询删除之后的数据,以后的查询都会匹配上逻辑删除字段
7.性能分析插件
在开发的时候发现慢sql
1.配置插件即可
8.条件构造器
平时编写sql,一般最多都是写一些条件;MP也提供了构造器提供使用