狂神MybatisPlus学习笔记

简介

 MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 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 操作智能分析阻断,也可自定义拦截规则,预防误操作

2、快速入门体验

地址:https://baomidou.com/guide/quick-start.html

使用第三方组件:

  1. 使用对应的依赖;
  2. 如何搞定依赖的配置;
  3. 代码怎么写

步骤

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-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <!--mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.0.5</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

5、连接数据库

mysql5连接驱动不需要时区

mysql8连接驱动配置

6、dao(mapper)-service-controller 

User实体类

最重要的部分就是继承BaseMapper父类,可以不用写通用的CRUD

配置包扫描路径

测试接口

查询结果

3、配置日志输出

日志的作用是什么?为什么需要使用日志?

sql语句是不可见的,因此需要到日志中查看。

mybatis-plus日志配置

日志输出

4、插入测试和雪花算法

CRUD拓展

插入测试

 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。

主键自增

其他源码解释

6、更新操作

updateById的参数是一个对象

自动拼接动态sql

自动填充

创建时间、修改时间!这些个操作一遍都是自动化完成的,我们不希望手动更新!
阿里巴巴开发手册︰所有的数据库表:gmt_create、 gmt_modified几乎所有的表都要配置上!而且需要自动化!
 

方式一:数据库级别

1、添加创建时间和修改时间,默认值是当前时间CURRENT_TIMESTAMP 

2、实体类中添加字段

3、再次更新查看结果即可

方式二:代码级别

1、删除数据库的默认值和跟新操作

2、在实体类字段属性上添加内容

3、编写处理器Handler来处理这个注解

首先需要继承元数据处理器MetaObjectHandler,然后重写插入填充修改填充方法。

3、测试插入,发现所有时间全部填充成功。

4、测试更新,发现只有修改的那行更新时间发生变化。

8、乐观锁处理讲解

乐观锁:故名思义十分乐观,它总是认为不会出现问题,无论干什么不去上锁!如果出现了问题,再次更新值测试。(会使用一个版本号version)。

悲观锁:故名思义十分悲观,它总是认为总是出现问题,无论千什么都会上锁!再去操作!

乐观锁实现方式:

  • 取出记录时,获取当前version
  • 更新时,带上这个version
  • 执行更新时, set version = newVersion where version = oldVersion
  • 如果version不对,就更新失败

MP中乐观锁的测试

1、增加version字段

2、实体类添加对应的字段

3、编写MybatisPlus的配置类

(1)将包扫描注解转移到这里

(2)添加开启事务管理的注解

(3)注册乐观锁插件

乐观锁成功案例

 乐观锁失败案例

9、查询操作

批量查询

条件查询,自动拼接

10、分页查询

1、数据库使用limit分页;

2、PageHelper第三方插件分页;

3、MP自带分页插件。

如何使用MP的分页插件

1、配置拦截器

2、测试分页功能

11、删除操作

通过map删除

12、逻辑删除

逻辑删除:通过一个变量来让他失效,deleted=0==>deleted=1

物理删除:直接从数据库中删除数据

管理员可以查看被删除的记录,类似于回收站。

配置逻辑删除组件

逻辑删除为1,逻辑未删除为0

逻辑删除使用的是更新操作,不是删除操作

13、性能分析插件

1、导入插件

需要在SpringBoot配置环境为dev

2、测试使用

设置100ms超时,超过100ms就会抛出异常,可以筛选出速度慢的sql,用于优化提升。

14、条件查询Wapper

做一些复杂的条件查询可以使用QueryWapper<User>

条件甚至可以写成子查询

 

 

 

 

 

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值