简介
MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
特性
地址:https://baomidou.com/guide/quick-start.html
使用第三方组件:
步骤
1、创建数据库mybatis_plus
2、创建表user
DROP TABLE IF EXISTS user;
CREATE TABLE user
(
id BIGINT(20) NOT NULL COMMENT '主键ID',
name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
age INT(11) NULL DEFAULT NULL COMMENT '年龄',
email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (id)
);
在真实的开发过程中,除了以上的字段,version(乐观锁)、deleted(逻辑删除)、gmt_create(创建时间)、gmt_modified(修改时间)这些字段也是必要的。
3、使用springboot初始化项目
4、导入依赖
mysql
mysql-connector-java
org.projectlombok
lombok
com.baomidou
mybatis-plus-boot-starter
3.0.5
org.springframework.boot
spring-boot-starter-web
5、连接数据库
mysql5连接驱动不需要时区
mysql8连接驱动配置
6、dao(mapper)-service-controller
User实体类
最重要的部分就是继承BaseMapper父类,可以不用写通用的CRUD
配置包扫描路径
测试接口
查询结果
日志的作用是什么?为什么需要使用日志?
sql语句是不可见的,因此需要到日志中查看。
mybatis-plus日志配置
日志输出
插入测试
id是自动生成的,result返回结果是受影响的行数。
插入结果
对应数据库中的主键(uuid、自增id、雪花算法、redis、 zookeeper
分布式系统唯一id生成:https://www.cnblogs.com/haoxinyue/p/5208136.html
雪花算法:
snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是0。
主键自增
其他源码解释
updateById的参数是一个对象
自动拼接动态sql
自动填充
创建时间、修改时间!这些个操作一遍都是自动化完成的,我们不希望手动更新!
阿里巴巴开发手册︰所有的数据库表:gmt_create、 gmt_modified几乎所有的表都要配置上!而且需要自动化!
方式一:数据库级别
1、添加创建时间和修改时间,默认值是当前时间CURRENT_TIMESTAMP
2、实体类中添加字段
3、再次更新查看结果即可
方式二:代码级别
1、删除数据库的默认值和跟新操作
2、在实体类字段属性上添加内容
3、编写处理器Handler来处理这个注解
首先需要继承元数据处理器MetaObjectHandler,然后重写插入填充和修改填充方法。
3、测试插入,发现所有时间全部填充成功。
4、测试更新,发现只有修改的那行更新时间发生变化。
乐观锁:故名思义十分乐观,它总是认为不会出现问题,无论干什么不去上锁!如果出现了问题,再次更新值测试。(会使用一个版本号version)。
悲观锁:故名思义十分悲观,它总是认为总是出现问题,无论千什么都会上锁!再去操作!
乐观锁实现方式:
- 取出记录时,获取当前version
- 更新时,带上这个version
- 执行更新时, set version = newVersion where version = oldVersion
- 如果version不对,就更新失败
MP中乐观锁的测试
1、增加version字段
2、实体类添加对应的字段
3、编写MybatisPlus的配置类
(1)将包扫描注解转移到这里
(2)添加开启事务管理的注解
(3)注册乐观锁插件
乐观锁成功案例
乐观锁失败案例
批量查询
条件查询,自动拼接
1、数据库使用limit分页;
2、PageHelper第三方插件分页;
3、MP自带分页插件。
如何使用MP的分页插件
1、配置拦截器
2、测试分页功能
通过map删除
逻辑删除:通过一个变量来让他失效,deleted=0==>deleted=1
物理删除:直接从数据库中删除数据
管理员可以查看被删除的记录,类似于回收站。
配置逻辑删除组件
逻辑删除为1,逻辑未删除为0
逻辑删除使用的是更新操作,不是删除操作
13、性能分析插件
1、导入插件
需要在SpringBoot配置环境为dev
2、测试使用
设置100ms超时,超过100ms就会抛出异常,可以筛选出速度慢的sql,用于优化提升。
14、条件查询Wapper
做一些复杂的条件查询可以使用QueryWapper
条件甚至可以写成子查询