MyBatis-Plus(一)

视频链接:https://www.bilibili.com/video/BV12R4y157Be/?spm_id_from=333.337.search-card.all.click&vd_source=9545770e4a2968c05878ffac8589ec6c
视频选集:P1— P28

1.MyBatis-Plus概念

1.1 简介

  • MyBatis-Plus是一个MyBatis的增强工是,.在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。MyBatis-Plus提供了通用的mapper和service,可以在不编写任何SQL语句的情况下,快速的实现对单表的CRUD、批量、逻辑删除、分页等操作。
  • 本视频从MyBatis-Plus的特性及使用,到MyBatis-Plus所提供的优秀的插件,以及多数据源的配置都有详细的讲解。并对ldea中的快速开发插件MyBatisX也进行了功能的演示。
  • 本视频主要以MySQL数据库为案例,使用ldea作为IDE,使用Maven作为构建工具,使用Spring Boot为大家展示MyBatis-Plus的各个功能,所以学习本视频需要有MyBatis和Spring Boot的基础。

在这里插入图片描述

1.2 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操作智能分析阻断,也可自定义拦截规则,预防误操作

1.3 MyBatis-Plus支持的数据库以及框架结构

任何能使用MyBatis进行CRUD,并且支持标准SQL的数据库,具体支持情况如下,如果不在下列表查看分页部分教程PR您的支持。
在这里插入图片描述
MyBatis-Plus框架结构:
在这里插入图片描述
左边:先扫描实体,通过反射抽取,把实体类中的属性抽取出来;再去分析要操作的表,要操作的实体类中的属性,也就是表中的字段是什么;最终再去生成相对于的SQL语句,把语句注入到MyBatis容器中
在这里插入图片描述

2.入门案例

2.1 开发环境

在这里插入图片描述

2.2 创建测试数据库和表

在这里插入图片描述
在这里插入图片描述

2.3 创建Spring Boot工程

先检查Maven环境:
在这里插入图片描述
创建新的工程:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
删除不需要的:
在这里插入图片描述
添加依赖:
在这里插入图片描述

在这里插入图片描述
下载lombok插件:
在这里插入图片描述

2.4 配置application.yml

在这里插入图片描述

在这里插入图片描述

2.5 创建实体类以及lombok的简单使用

创建实体类:
①用注解得到各个方法
在这里插入图片描述
②由于上面要写的太多,用一个就可以表达
在这里插入图片描述

2.6 创建mapper接口并扫描

在这里插入图片描述
在启动类中,在springboot中使用MyBatis时,一定要设置当前mapper接口所在的包以及映射文件所在的包
在这里插入图片描述

2.7 测试

创建测试类:
在这里插入图片描述
问题:userMapper报错
解决方案:添加注解【将当前mapper接口标识为持久层组件】
在这里插入图片描述
其中SQL语句是MyBatis-Plus中编写的

效果展示:
在这里插入图片描述

2.8 加入日志

在application.xml中:
在这里插入图片描述
将上面代码重新运行:
在这里插入图片描述

MyBatis-Plus操作的表以及当前表中的字段,由实体类以及实体类中的属性决定

3.BaseMapper

3.1 接口介绍

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2 测试BaseMapper的新增功能

在这里插入图片描述
展示:
在这里插入图片描述

3.3 测试BaseMapper的删除功能

3.3.1 deleteById

通过id删除用户信息
在这里插入图片描述
在这里插入图片描述

3.3.2 deleteByMap

根据map集合中所设置的条件删除用户信息
在这里插入图片描述

3.3.3 deleteBatchIds

在这里插入图片描述

3.4 测试BaseMapper的修改功能

修改用户信息
在这里插入图片描述
在这里插入图片描述

3.5 测试BaseMapper的查询删功能

3.5.1 selectById

在这里插入图片描述
在这里插入图片描述

3.5.2 selectBatchIds

在这里插入图片描述

3.5.3 selectByMap

根据map集合中的条件查询用户信息
在这里插入图片描述

3.5.4 selectList

查询所有数据
在这里插入图片描述

4.测试自定义功能

在MyBatis-Plus中设置映射文件的路径,需要通过mapper-locations来进行配置,而这个配置有一个默认位置,在类路径下的mapper下面的任意目录下的所有的.xml
在这里插入图片描述
如果不配置路径:
在这里插入图片描述
在这里插入图片描述
定义接口中的方法:
在这里插入图片描述
在映射文件中实现:
在这里插入图片描述
测试:
在这里插入图片描述

结果:
在这里插入图片描述

5.通用Service接口

在这里插入图片描述
MyBatis-Plus中有一个接口IService和其实现类Servicelmpl,封装了常见的业务层逻辑详情查看源码IService和Servicelmpl

创建接口:
在这里插入图片描述
接口实现类:
在这里插入图片描述

在这里插入图片描述

5.1 查询总记录数

测试类:
在这里插入图片描述
结果展示:
在这里插入图片描述

5.2 批量添加功能

mapper中只能添加单条数据,不能批量添加,批量添加只能在Service中有【Service其实也是单个,只是循环添加了】
在这里插入图片描述
展示:
在这里插入图片描述

6.MyBatis-Plus的常用注解

6.1 @TableName

当我们将数据库中表的名字由user改为t_user后,再次运行程序将会出错,解决方案:
在这里插入图片描述

还可以设置全局配置:
在这里插入图片描述

6.2 @TableId

当表中的主键id被改为uid后,很多代码中的就需要相应的进行修改
解决方法:【此时实体类中定义的变量uid和表中的名字uid是一样的才可行】
在这里插入图片描述
@TableId注解查看源代码:
在这里插入图片描述

6.2.1 @TableId的value属性

在这里插入图片描述
在这里插入图片描述

解决方案:
在这里插入图片描述
如果只有一个值,可以简略为:
在这里插入图片描述

6.2.2 @TableId的type属性

在这里插入图片描述
将数据库的表设置为自增:
在这里插入图片描述

效果:
在这里插入图片描述

在这里插入图片描述

6.2.3 通过全局配置配置主键生成策略

在这里插入图片描述

6.2.4 雪花算法

  • 背景:需要选择合适的方案去应对数据规模的增长,以应对逐渐增长的访问压力和数据量。
    数据库的扩展方式主要包括:业务分库、主从复制,数据库分表。

  • 数据库分表
    将不同业务数据分散存储到不同的数据库服务器,能够支撑百万甚至千万用户规模的业务,但如果业务继续发展,同一业务的单表数据也会达到单台数据库服务器的处理瓶颈。例如,淘宝的几亿用户数据,如果全部存放在一台数据库服务器的一张表中,肯定是无法满足性能要求的,此时就需要对单表数据进行拆分。

  • 单表数据拆分有两种方式:垂直分表和水平分表。
    在这里插入图片描述

  • 垂直分表
    垂直分表适合将表中某些不常用且占了大量空间的列拆分出去。
    例如,前面示意图中的nickname和description字段,假设我们是一个婚恋网站,用户在筛选其他用户的时候,主要是用age和sex两个字段进行查询,而nickname和description两个字段主要用于展示,一般不会在业务查询中用到。description本身又比较长,因此我们可以将这两个字段独立到另外一张表中,这样在查询 age和sex时,就能带来一定的性能提升。

  • 水平分表
    水平分表适合表行数特别大的表,有的公司要求单表行数超过5000万就必须进行分表,这个数字可以作为参考,但并不是绝对标准,关键还是要看表的访问性能。对于一些比较复杂的表,可能超过1000万就要分表了;而对于一些简单的表,即使存储数据超过1亿行,也可以不分表。

但不管怎样,当看到表的数据量达到千万级别时,作为架构师就要警觉起来,因为这很可能是架构的性能瓶颈或者隐患。
在这里插入图片描述
在这里插入图片描述


雪花算法:由Twitter公布的分布式主键生成算法,它能够保证不同表的主键的不重复性,以及相同表的主键的有序性。
在这里插入图片描述

6.3 @TableField

当字段名和属性名不一致的时候
在这里插入图片描述

6.4 @TableLogic

  • 物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除的数据
  • 逻辑删除:假删除,将对应数据中代表是否被删除字段的状态修改为"被删除状态”,之后在数据库中仍旧能看到此条数据记录
  • 使用场景:可以进行数据恢复

在这里插入图片描述
删除测试:
在这里插入图片描述

展现:
在这里插入图片描述
再次重新查找数据库:
在这里插入图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值