MyBatisPlus概述
为什么要学习它呢?MyBatisPlus可以节省我们大量工作时间,所有的CRUD代码它都可以自动化完成!
JPA、tk-mapper、MyBatisPlus
偷懒的!
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
特性
快速入门
地址:https://mp.baomidou.com/guide/quick-start.html#初始化工程
使用第三方组件:
步骤
创建一个数据库、数据表
并且插入一些测试数据
编写项目,初始化项目!使用SpringBoot初始化!
1、导入对应的依赖
导入相关依赖
说明:我们使用 mybatis-plus 可以节省我们大量的代码,尽量不要同时导入 mybatis 和 mybatis-plus!版本的差异!
2、配置
5、连接数据库!这一步和 mybatis 相同!
idea连接数据库
输入数据库账号密码测试连通
选择连接的数据库
3、编写代码
先根据数据库表中的字段编写实体类
编写Mapper层,注解也可用@mapper,至此,所有crud操作已经自动编写完成
在启动类上加入扫描mapper文件夹的注解
编写测试代码,调用相应的查询操作
思考
1、SQL谁帮我们写的?MyBatis-Plus 都写好了
2、方法哪里来的? MyBatis-Plus 都写好了
配置日志
我们所有的sql现在是不可见,,我们希望知道它是怎么执行的,所以我们必须要看日志!
配置完毕日志之后,后面的学习就需要注意这个自动生成的SQL,你们就会喜欢上 MyBatis-Plus!
CRUD扩展
测试插入
主键生成策略
分布式系统唯-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。可以保证几乎全球唯一!
MP提供的主键生成策略有如下几种
默认不配的情况下是雪花算法即如下所示,如果要修改主键生成策略,需要用到如下的@TableId注解修改生成方式
主键自增
实体类字段上 @TableId(type = IdType.AUTO)
数据库字段一定要是自增!
测试更新
MP的强大之处在于,我们通过给这个user对象设置不同的更改值,它会自动完成一个动态的sql语句拼接
自动填充
创建时间、修改时间!这些个操作一遍都是自动化完成的,我们不希望手动更新!
阿里巴巴开发手册:所有的数据库表:gmt_create、gmt_modified几乎所有的表都要配置上!而且需要自动化!
第一种方式:数据库级别(工作中不允许你修改数据库)
在数据库中设置这两个字段,默认值为当前时间,更新时间在更新的时候自动更新
再次测试插入方法,我们需要先把实体类同步!实体类加入这两个属性
第二种方式:代码级别
1、删除数据库的默认值、更新操作!
2、实体类字段属性上需要增加注解
创建时间在插入的时候自动填充,更新时间在插入和更新操作的时候自动填充
3.创建一个Handler实现MetaObjectHandler接口,重写两个方法,配置好在插入、更新操作时要自动填充的字段内容
乐观锁
在面试过程中,我们经常会被问道乐观锁,悲观锁!这个其实非常简单!
乐观锁:故名思意十分乐观,它总是认为不会出现问题,无论干什么不去上锁!如果出现了问题,再次更新值测试
悲观锁:故名思意十分悲观,它总是认为总是出现问题,无论干什么都会上锁!再去操作!我们这里主要讲解 乐观锁机制!
乐观锁实现方式:
。取出记录时,获取当前 version
。更新时,带上这个version
执行更新时,set version=newVersion where version=oldVersion
。如果version不对,就更新失败
给数据库中增加version字段!
2、我们实体类加对应的字段
新建一个MP的配置类,将我们之前在主启动类上扫描mapper的注解也剪切过来,在这个类中注册乐观锁插件
测试乐观锁
可以看到,最后一条更新语句没有执行,因为version版本已经在第一次更新时发生了改变
测试查询
可以根据id去查单个数据,也可通过一个id的列表来查询多个数据
也可以自定义查询,传入map查询
分页查询
分页在网站使用的十分之多!
1、原始的 limit 进行分页
2、pageHelper 第三方插件
3、MP 其实也内置了分页插件!
1、配置拦截器组件即可
在MP配置文件中注册分页插件
2、直接使用Page对象即可!
测试删除
可以通过id删除单个数据,也可通过id的列表批量删除数据
也可通过map自定义删除数据
逻辑删除
物理删除:从数据库中直接移除
逻辑删除:再数据库中没有被移除,而是通过一个变量来让他失效! deleted=0=> deleted=1
管理员可以查看被删除的记录!防止数据的丢失,类似于回收站!
测试一下:
1、在数据表中增加一个 deleted 字段,默认值为0
2、实体类中增加这个属性
3、配置
在MP配置类中注册逻辑删除组件
在properties文件中进行配置,删除默认值为1,不删除默认值为0
、
测试逻辑删除
可以看到在我们根据id删除数据时,不是删除sql,而是执行了更新sql,默认在其后追加了删除条件,逻辑删除字段为0的数据,设置了这个字段值更改为1,代表这个数据删除成功
我们在以后得查数据中,都会看到默认增加了条件,逻辑删除字段为0,才可查出